java8 stream常用操作
-
遍历
list.stream().forEach(System.out::println);
-
获取实体list某个字段集合
list.stream().map(e -> e.getId).collect(Collectors.toList()); //可以有更多操作 list.stream().map(e ->Long.parseLong(e.getId)).collect(Collectors.toList());
-
过滤数据
List<entity> heartStatusDataList = list.stream().filter(e->"1".equals(e.getType())).collect(Collectors.toList());
-
list分组为map
Map<String, List<entity>> map = list.stream().collect(Collectors.groupingBy(e->e.getType()));
-
实体list字段累加
//Integer类型字段累加 list.stream().map(entity::getDistance).reduce(Integer::sum)); //Double类型字段累加 list.stream().map(entity::getDistance).reduce(Double::sum)); list.stream().mapToDouble(entity::getDistance).sum(); //Bigdicimal类型字段累加 Bigdicimal distance = list.stream().map(entity::getDistance).reduce(BigDecimal.ZERO,BigDecimal::add);
-
前端传过来以逗号拼接id字符串转idList
Arrays.asList(((String)params.get("idList")).split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
-
拼接
String idStr = list.stream().map(x -> x.getId().toString()).collect(Collectors.joining(","));
-
map分类求和
/** *按姓名分类统计积分 **/ DailydataAndIntegralEntity data1 = new DailydataAndIntegralEntity(); DailydataAndIntegralEntity data2 = new DailydataAndIntegralEntity(); DailydataAndIntegralEntity data3 = new DailydataAndIntegralEntity(); DailydataAndIntegralEntity data4 = new DailydataAndIntegralEntity(); data1.setName("aa"); data1.setTotalDayIntegral(1.0); data2.setName("bb"); data2.setTotalDayIntegral(2.0); data3.setName("aa"); data3.setTotalDayIntegral(3.0); data4.setName("dd"); data4.setTotalDayIntegral(4.0); List<DailydataAndIntegralEntity> dailyDataList = new ArrayList<>(); dailyDataList.add(data1); dailyDataList.add(data2); dailyDataList.add(data3); dailyDataList.add(data4); //按姓名分类 Map<String,List<DailydataAndIntegralEntity>> dataListMap = dailyDataList.stream().collect(Collectors.groupingBy(DailydataAndIntegralEntity::getName)); //分类后的list List<Map<String, Object>> returnList = new ArrayList<>(); dataListMap.forEach((e,eList) -> { Map<String, Object> returnMap = new HashMap<>(); eList.forEach(data->{ //排名 //姓名 returnMap.put("name", e); //积分 returnMap.put("integral", eList.stream().map(DailydataAndIntegralEntity::getTotalDayIntegral).reduce(Double::sum)); returnList.add(returnMap); }); });
-
排序
//按某字段大小倒序排序 rankResList = rankResList.stream().sorted(Comparator.comparingDouble(TrainRankResEntity::getData).reversed()).collect(Collectors.toList()); //自定义排序 returnList = returnList.stream().sorted((o1, o2) -> { if (o1.getStartTime().before(o2.getStartTime())) { return -1; } else if (o1.getStartTime().after(o2.getStartTime())) { return 1; } else { return 0; } }).collect(Collectors.toList());
-
去重
/** *整体去重 **/ list.stream().distinct().collect(Collectors.toList()); /** *根据某几个属性去重 **/ list.stream().collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>( Comparator.comparing(p->p.getPatentName() + ";" + p.getLevel()))), ArrayList::new));
-
最小值
list.stream().min(Comparator.comparingDouble(IntegralTopListEntity::getIntegral)).orElseGet(null);