java使用stream计算(最大值、最小值、均值等等)
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());
}
}