需要对具有字符串的地图列表进行排序,对象条目如下所示,
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
答案 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。