Stream流常见操作
.stream() 常用方法
.forEach()
该方法接收一个 Consumer 接口函数,会将每一个流元素交给该函数进行处理
.filter():过滤
该接口接收一个 Predicate 函数式接口参数(可以是一个Lambda或方法引用)作为筛选条件。
private static void filterDemo(){
String[] array = { "张无忌", "张三丰", "周芷若" };
Stream<String> stream = Stream.of(array);
Stream<String> result = stream.filter(s -> s.startsWith("张"));
result.forEach(s -> System.out.println(s));
}
.map() : 映射
如果需要将流中的元素映射到另一个流中,可以使用 map 方法。
该接口需要一个 Function 函数式接口参数,可以将当前流中的T类型数据转换为另一种R类型的流。
private static void mapDemo(){
String[] array = {"10", "12", "18"};
Stream<String> stringStream = Stream.of(array);
Stream<Integer> integerStream = stringStream.map(s -> Integer.parseInt(s));
integerStream.forEach(integer -> System.out.println(integer));
}
count():统计流中的元素个数
正如旧集合 Collection 当中的 size 方法一样,流提供 count 方法来数一数其中的元素个数
long num = stream.count();
limit():取用前几个
skip():跳过前几个
concat():组合
private static void concatDemo(){
Stream<String> stream1 = Stream.of("张三");
Stream<String> stream2 = Stream.of("李四");
Stream<String> stream = Stream.concat(stream1,stream2);
stream.forEach(s -> System.out.println(s));
}
sorted() :排序
元素收集
1.收集到List集合:
流对象.collect( Collectors.toList() )
获得List集合。
2.收集到Set集合:
流对象.collect( Collectors.toSet() )
获得Set集合。
3.收集到数组:
流对象. toArray()
由于泛型擦除的原因,返回值类型是Object[]
字符串拼接
参数为连接符,返回值为一个集合。
private static void joinDemo(){
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
System.out.println(list);
System.out.println(list.stream().collect(Collectors.joining(",")));
}
分组
归约 reduce()
rudece
方法的功能是从一个流中生成一个值,reduce方法参数为一个函数,返回值为Optional对象。
private static void reduceDemo(){
List<Integer> num = Arrays.asList(1, 2, 4, 5, 6, 7);
// 求和
num.stream().reduce((x, y) -> x+y ).ifPresent(System.out::println);
// 求最大值
num.stream().reduce(Integer::max).ifPresent(System.out::println);
}
distinct() 去重
学习知乎:Stream流处理介绍以及Stream的基本操作