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的基本操作

你可能感兴趣的:(Java,java)