排序地图列表:需要一次根据两个值对地图列表进行排序

时间:2018-05-24 09:50:00

标签: java

需要对具有字符串的地图列表进行排序,对象条目如下所示,

List<Map<String,Object>> listOfMap = new ArrayList<Map<String,Object>>();
// creating maps
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("Number", 2);
map1.put("Date1", new Date("12-OCT-2018"));// Consider any date
map1.put("Date2", new Date("02-MAY-2017"));// Consider any date

Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("Number", 5);
map2.put("Date1", new Date("12-OCT-2018"));// Consider some date
map2.put("Date2", new Date("01-JAN-2017"));// Consider some date

// ...

Map<String, Object> mapN = new HashMap<String, Object>();
mapN.put("Number", 8);
mapN.put("Date1", new Date("10-JAN-2016"));// Consider some date
mapN.put("Date2", new Date("10-MAY-2016"));// Consider some date

使用上面的Map值列表,我需要在一段时间内根据date1和date 2排序以下输出..

我对上述输入数据的所需O / p顺序为:

Number  Date1      Date2
8       10-Jan-16  10-May-16  //mapN 
5       12-Oct-18  1-Jan-17   //map2
2       12-Oct-18  2-May-17   //map1

3 个答案:

答案 0 :(得分:1)

我将你的地图对象封装到一个类中。事实上,你可能根本不需要地图,因为我看到你为每个地图使用相同的键(你不能使用类的属性吗?)。

完成此封装后,使该类实现类似的接口,并在compareTo方法中,使用您需要的条件进行比较。

这样做,之后您需要做的就是在列表中使用.sort()。

编辑:如果您不得不保存地图,请创建

implements Comparator<Map<String, Object>>

您比较地图,并将其作为参数传递给列表的.sort()方法。

答案 1 :(得分:1)

这可能会对您有所帮助:

List<Map<String,Object>> listOfMap = new ArrayList<Map<String,Object>>();
// creating maps
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("Number", 2);
map1.put("Date1", new Date("12-OCT-2018"));// Consider any date
map1.put("Date2", new Date("02-MAY-2017"));// Consider any date

Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("Number", 5);
map2.put("Date1", new Date("12-OCT-2018"));// Consider some date
map2.put("Date2", new Date("01-JAN-2017"));// Consider some date

Map<String, Object> mapN = new HashMap<String, Object>();
mapN.put("Number", 8);
mapN.put("Date1", new Date("10-JAN-2016"));// Consider some date
mapN.put("Date2", new Date("10-MAY-2016"));// Consider some date

listOfMap.add(map1);
listOfMap.add(map2);
listOfMap.add(mapN);

Collections.sort(listOfMap, new Comparator<Map<String,Object>>() {
    @Override
    public int compare(Map<String,Object> obj1, Map<String,Object> obj2 {
        Date obj1date1 = (Date) obj1.get("Date1");
        Date obj2date1 = (Date) obj2.get("Date1");
        if(obj1date1.compareTo(obj2date1)==0) {
            Date obj1date2 = (Date) obj1.get("Date2");
            Date obj2date2 = (Date) obj2.get("Date2");
            return obj1date2.compareTo(obj2date2);
        } else
            return obj1date1.compareTo(obj2date1);
    }
});

for(Map<String,Object> map : listOfMap)
    System.out.println(map.toString());

答案 2 :(得分:1)

如果您选择不使用封装类,您可以使用lambda函数来比较您的条目:

{{1}}

当然,如果编写封装类,也可以使用lambda。