stream
根据type分组
List<VO> vos
Map<String, List<VO>> map = vos.stream().collect(
Collectors.groupingBy(item -> item.getType)
)
分区
System.out.println("通过年龄进行分区排序:");
Map<Boolean, List<User>> children = Stream.generate(new UserSupplier3()).limit(5)
.collect(Collectors.partitioningBy(p -> p.getId() < 18));
System.out.println("children: " + children.get(true));
System.out.println("person: " + children.get(false));
获取某字段求和
double sum = list.stream().mapToDouble(VO::getNum).sum();
mapToDouble() 可以根据需要替换相应的方法
根据具体的值匹配分类
List<VO> vos = list.stream().filter(item -> "A".equalse(item.getType())).collect(Collectors.toList());
filter中可以多条件,支持与或非操作运算符
普通的排序取值
List<User> list = list.stream().sorted((u1, u2) -> u1.getName().compareTo(u2.getName())).limit(3)
.collect(Collectors.toList());
System.out.println("排序之后的数据:" + list);
优化排序取值
List<User> list = list.stream().limit(3).sorted((u1, u2) -> u1.getName().compareTo(u2.getName()))
.collect(Collectors.toList());
System.out.println("优化排序之后的数据:" + list);
最大最小
List<String> list = Arrays.asList("zhangsan","lisi","wangwu","xuwujing");
int maxLines = list.stream().mapToInt(String::length).max().getAsInt(); int minLines = list.stream().mapToInt(String::length).min().getAsInt();
System.out.println("最长长度:" + maxLines+",最短长度:"+minLines);
去重
String lines = "good good study day day up";
List<String> list = new ArrayList<String>();
list.add(lines);
List<String> words = list.stream().flatMap(line -> Stream.of(line.split(" "))).filter(word -> word.length() > 0)
.map(String::toLowerCase).distinct().sorted().collect(Collectors.toList());
System.out.println("去重复之后:" + words);
是否匹配
--allMatch:Stream 中全部元素符合则返回 true ;
--anyMatch:Stream 中只要有一个元素符合则返回 true;
--noneMatch:Stream 中没有一个元素符合则返回 true。
boolean all = lists.stream().allMatch(u -> u.getId() > 2);
System.out.println("是否都大于2:" + all);
boolean any = lists.stream().anyMatch(u -> u.getId() > 2);
System.out.println("是否有一个大于2:" + any);
boolean none = lists.stream().noneMatch(u -> u.getId() > 2);
System.out.println("是否没有一个大于2的:" + none);
字符串拼接
String concat = Stream.of("A", "B", "C", "D").reduce("", String::concat);
System.out.println("字符串:" + concat);
最大最小平均数
List<Integer> numbers = Arrays.asList(2, 6, 7, 4, 12);
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());
转换大写
List<String> list = Arrays.asList("zhangSan", "liSi", "wangWu");
System.out.println("转换之前的数据:" + list);
List<String> list2 = list.stream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println("转换之后的数据:" + list2);
TODO
|