Map列表转为Stream,遍历操作
怎么在java 8的map中使用stream
列表排序
res=res.stream().sorted(new Comparator<Map>() {
@Override
public int compare(Map map1, Map map2) {
int time1=Integer.parseInt(String.valueOf(map1.get("DATE_TIMESTAMP")));
int time2=Integer.parseInt(String.valueOf(map1.get("DATE_TIMESTAMP")));
String bay1=String.valueOf(map1.get("BAYDESC"));
String bay2=String.valueOf(map1.get("BAYDESC"));
if(time1 == time2){
return StrUtil.compare(bay1,bay2,true);
}
return time1 - time2;
}
}).collect(Collectors.toList());
.sorted(Comparator.comparing(
(Map map) -> Double.parseDouble(map.get("TIME").toString())
).reversed()
列表分组
- 按照MAP中的 键值A 分组
- 返回Map对象,每个key为A的不同值
- 比如按值A分组有10个分组,那么返回的MAP就有10组key - value
Map<String, Long> m1 = new HashMap<>();
m1.put("A", 1l);
m1.put("B", 100l);
m1.put("C", 100l);
Map<String, Long> m2 = new HashMap<>();
m2.put("A", 10l);
m2.put("B", 20l);
m2.put("C", 100l);
List<Map<String, Long>> beforeFormatting = new ArrayList<>();
beforeFormatting.add(m1);
beforeFormatting.add(m2);
Map<String, List<Map>> afterFormatting =
beforeFormatting.stream()
.collect(groupingBy(
(Map map)->String.valueOf(map.get("A"))
));
System.out.println(afterFormatting);
列表获取最大值对象、最小值对象、平均值
- 分别获取到最大值、最小值的“size”的map
- 获取列表数据的平均“TIME”值
List<Map> list=Stream.of(1,23,45,78,111).map(x ->{
return new HashMap(){
{
put("size",x);
}
};
}).collect(Collectors.toList());
Optional<Map> maxMap=list.stream()
.collect(Collectors.maxBy(Comparator.comparing((map -> Integer.parseInt(String.valueOf(map.get("size")))))));
Map map=maxMap.get();
if(!map.isEmpty()){
System.out.println(map.get("size"));
}
avg_time=data.stream()
.collect(Collectors.averagingDouble((Map map) -> Double.parseDouble(map.get("TIME").toString())));
参考链接
怎么在java 8的map中使用stream