java使用stream计算(最大值、最小值、均值等等)

时间:2025-03-12 09:44:35
public static void main(String[] args) { List<Persion> list = new ArrayList<>(); list.add(new Persion("AAAA", 'F', 10)); list.add(new Persion("BBBB", 'F', 11)); list.add(new Persion("CCCC", 'F', 12)); list.add(new Persion("DDDD", 'F', 13)); list.add(new Persion("EEEE", 'F', 14)); list.add(new Persion("FFFF", 'M', 15)); list.add(new Persion("GGGG", 'M', 16)); list.add(new Persion("HHHH", 'M', 17)); list.add(new Persion("IIII", 'M', 18)); list.add(new Persion("GGGG", 'M', 19)); list.add(new Persion("KKKK", 'M', 20)); //按某个字段进行分组 Map<String, List<Persion>> listMap = list.stream().collect(Collectors.groupingBy(Persion::getName)); Set<Map.Entry<String, List<Persion>>> entrySet = listMap.entrySet(); for (Map.Entry<String, List<Persion>> stringListEntry : entrySet) { System.out.println(stringListEntry.getKey()); System.out.println(stringListEntry.getValue()); } //某个字段求和 int sum = list.stream().mapToInt(l -> l.getAget()).sum(); System.out.println(sum); Integer sum2 = list.stream().map(l -> l.getAget()).reduce(Integer::sum).orElse(0); System.out.println(sum2); //最大值 int max = list.stream().mapToInt(l -> l.getAget()).max().getAsInt(); System.out.println(max); //最小值 int min = list.stream().mapToInt(l->l.getAget()).min().getAsInt(); System.out.println(min); //均值 double avg = list.stream().mapToDouble(l -> l.getAget()).average().getAsDouble(); System.out.println(avg); //逆序 List<Persion> sorts = list.stream().sorted(Comparator.comparing(Persion::getAget).reversed()).collect(Collectors.toList()); sorts.forEach(System.out::println); List<Persion> sorts2 = list.stream().sorted((a, b) -> b.getAget().compareTo(a.getAget())).collect(Collectors.toList()); sorts2.forEach(System.out::println); //去重 List<String> distinct = list.stream().map(l->l.getName()).distinct().collect(Collectors.toList()); System.out.println(distinct.size()); //list转为map,toMap 如果集合对象有重复的key,会报错Duplicate key,可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 Map<String, Persion> listToMap = list.stream().collect(Collectors.toMap(Persion::getName, a -> a, (k1, k2) -> k1)); Set<Map.Entry<String, Persion>> entries = listToMap.entrySet(); for (Map.Entry<String, Persion> entry : entries) { System.out.println(entry.getKey()); System.out.println(entry.getValue()); } }