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值。
运行结果如下:
distinct
去掉重复的字符串
public static void distinct() {
Stream.of("1", "2", "3", "1", "2")
.distinct()
.forEach(System.out::println);
}
和数据库的distinct是类似的。
运行结果如下:
limit
取字符串的前面三个
public static void limit() {
Stream.of("1", "2", "3", "11", "22", "33")
.limit(3)
.forEach(System.out::println);
}
运行结果如下:
skip
跳过前面三个字符串
public static void skip() {
Stream.of("1", "2", "3", "11", "22", "33")
.skip(3)
.forEach(System.out::println);
}
与limit相反。
运行结果如下:
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);
}
可以默认排序,也可以自定义排序。
运行结果如下:
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。
运行结果如下:
Map
把1,2,3转换成N的平方
map是映射的意思,接受一个函数作为参数。这个函数会被应用到每个元素上,并将其映射成一个新的元素
public static void map() {
Stream.of(1, 2, 3)
.map(n -> n * n)
.forEach(System.out::println);
}
运行结果如下:
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的流,为了避免装拆箱带来的性能消耗。
其他的mapToLong
、mapToDouble
雷同
flatMap
对字符串数组去重并输出
Stream.of(new String[]{"123", "345"})
.map((s) -> s.split(""))
.flatMap(Arrays::stream)
.distinct()
.forEach(System.out::println);
运行结果如下:
在map映射后,得到的是Stream<String[]>的流,然后再通过flatMap的扁平化处理,转化为Stream<String>的流。
其他的flatMapToInt
、flatMapToLong
、flatMapToDouble
雷同。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。