一、中间操作
中间操作是返回一个新的流,并在返回的流中包含所有之前的操作结果。它们总是延迟计算,这意味着它们只会在终止操作时执行,这样可以最大限度地优化资源使用。
1. filter(过滤)
filter()
方法接受一个谓词(一个返回boolean值的函数),并返回一个流,其中仅包含通过该谓词的元素。
eg:从一个数组中筛选出长度大于5的元素。
@Test
public void testFilter() {
List<String> names = Arrays.asList("Chengdu", "Shanghai", "Changsha", "Wuhan", "Hangzhou");
List<String> collect = names.stream().filter(item -> item.length() > 5).collect(Collectors.toList());
System.out.println(collect);
}
2. map(转换)
map()
方法可将一个流的元素转换为另一个流。它接受一个函数,该函数映射流中的每个元素到另一个元素。
eg:对数字列表中的每个元素进行乘以 2 的操作,并将操作后的结果保存到新的列表中。
@Test
public void testMap() {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> collect = numbers.stream().map(n -> {
n = n * 2;
return n;
}).collect(Collectors.toList());
for (Integer integer : collect) {
System.out.println("integer = " + integer);
}
}
eg:将结果转换为Map。
@Test
public void testMapToMap() {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Map<Byte, Integer> collect = numbers.stream().collect(Collectors.toMap(Integer::byteValue, item -> item * 2, (val1