Stream流
1、Stream流生成方式
- Collections集合使用stream()方法得到stream流。
- Map集合通过间接方式得到stream流。
- 数组可以通过Stream.of(…)方法得到stream流。
2、Stream流的中间方法
2.1、filter过滤
- filter(Predicate predicate)对流中数据进行过滤
list.stream().filter(s -> s.startwith("li")).forEach(System.out::println)
2.2、limit截取数据
- limit(lone maxsize)截取前指定参数个数
list.stream().limit(3)
2.3、skip跳过元素
list.stream().skip(2)
2.4、concat合并流
- concat(Stream a, Stream b)合并流
Stream.concat(stream1, stream2)
2.5、distinct去重
Stream.concat(stream1, stream2).distinct()
2.6、sorted排序
list.stream().sorted()
- sorted(Comparator comparator)指定方式排序
list.stream().sorted((s1, s2) -> {
int num1 = s1.length() - s2.length();
int num2 = num1 == 0 ? s.compareTo(s2):num;
return num2;
})
2.7、forEach循环
- forEach(Consumer consumer)循环
list.stream().forEach(s -> sout(s))
2.8、count元素个数
int size = list.stream().count();
2.9、collect收集
- collect(Collecter collecter)收集方法,把数据收集到集合中,通过工具类Collectors提供的收集方法:
- Collectors.toList()
- Collectors.toSet()
- Collectors.toMap(Function keMapper, Function valueMapper)
- 例子1:
Stream<String> stream = list.stream().filter(s -> s.length() == 3);
List<String> list = stream.collect(Collectors.tolist());
String[] strArray = {"张三,32", "李四,35", "王五,25"};
Stream<String> stream = Stream.of(strArray).filter(s -> Integer.parseInt(s.split(",")[1]) > 30);
Map<String, Integer> map = stream.collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
List<Integer> list2 = new ArrayList<>();
list2.add(5);
list2.add(6);
list2.add(7);
List<Integer> list = Stream.concat(list1.stream(),list2.stream()).collect(Collectors.toList());