转载

java8 - 中间操作

filter

过滤字符串长度为1的字符串

public static void filter() {
    Stream.of("1", "2", "3", "11", "22", "33")
            .filter((str) -> str.length() == 1)
            .forEach(System.out::println);
}

这边filter传递的是Predicate,返回的是boolean值。

运行结果如下:

java8 - 中间操作

distinct

去掉重复的字符串

public static void distinct() {
    Stream.of("1", "2", "3", "1", "2")
            .distinct()
            .forEach(System.out::println);
}

和数据库的distinct是类似的。

运行结果如下:

java8 - 中间操作

limit

取字符串的前面三个

public static void limit() {
    Stream.of("1", "2", "3", "11", "22", "33")
            .limit(3)
            .forEach(System.out::println);
}

运行结果如下:

java8 - 中间操作

skip

跳过前面三个字符串

public static void skip() {  
    Stream.of("1", "2", "3", "11", "22", "33")  
            .skip(3)  
            .forEach(System.out::println);  
}

与limit相反。

运行结果如下:

java8 - 中间操作

sorted

对数字排序

public static void sorted() {
    Stream.of(1, 3, 2, 4)
            .sorted()
            .forEach(System.out::println);
}

public static void sorted2() {
    Stream.of(1, 3, 2, 4)
            .sorted(Integer::compareTo)
            .forEach(System.out::println);
}

可以默认排序,也可以自定义排序。

运行结果如下:

java8 - 中间操作

peek

对流的中间过程进行打印

public static void peek() {
    Stream.of("1", "2", "3", "11", "22", "33")
            .filter((str) -> str.length() == 1)
            .peek((t)->{
                System.out.print(t);
                System.out.println("sorted");
            })
            .sorted()
            .peek((t)->{
                System.out.print(t);
                System.out.println("sorted2");
            })
            .limit(2)
            .peek((t)->{
                System.out.print(t);
                System.out.println("sorted3");
            })
            .collect(Collectors.toList());

}

peek中传的是Consumer。

运行结果如下:

java8 - 中间操作

Map

把1,2,3转换成N的平方

map是映射的意思,接受一个函数作为参数。这个函数会被应用到每个元素上,并将其映射成一个新的元素

public static void map() {
    Stream.of(1, 2, 3)
            .map(n -> n * n)
            .forEach(System.out::println);
}

运行结果如下:

java8 - 中间操作

mapToInt

把1,2,3转换成N的平方,再求和

public static void mapToInt() {
    int sum = Stream.of(1, 2, 3)
            .mapToInt(n -> n * n)
            .sum();
    System.out.println(sum);
}

得到的结果是14,mapToInt主要是返回int的流,为了避免装拆箱带来的性能消耗。

其他的 mapToLongmapToDouble 雷同

flatMap

对字符串数组去重并输出

Stream.of(new String[]{"123", "345"})
            .map((s) -> s.split(""))
            .flatMap(Arrays::stream)
            .distinct()
            .forEach(System.out::println);

运行结果如下:

java8 - 中间操作

在map映射后,得到的是Stream<String[]>的流,然后再通过flatMap的扁平化处理,转化为Stream<String>的流。

java8 - 中间操作

其他的 flatMapToIntflatMapToLongflatMapToDouble 雷同。

原文  https://segmentfault.com/a/1190000021576512
正文到此结束
Loading...