筛选filter
filter函数接收一个Lambda表达式作为参数,该表达式返回boolean,在执行过程中,流将元素逐一输送给filter,并筛选出执行结果为true的元素。
长度大于2的字符串
@Test
public void filter() {
List<String> list = Arrays.asList("1322", "21", "3", "4");
List<String> collect = list.stream().filter(x -> x.length() > 1)
.collect(Collectors.toList());
}
去重distinct
去掉重复的结果:
@Test
public void distinct() {
List<String> list = Arrays.asList("1322", "21", "3", "4", "2");
List<String> collect = list.stream().distinct()
.collect(Collectors.toList());
}
截取
@Test
public void limit() {
List<String> list = Arrays.asList("1322", "21", "3", "4", "2");
List<String> collect = list.stream().limit(2).collect(Collectors.toList());
}
跳过
跳过流的前n个元素:
List<Person> result = list.stream()
.skip(3)
.collect(toList());
映射
对流中的每个元素执行一个函数,使得元素转换成另一种类型输出。流会将每一个元素输送给map函数,并执行map中的Lambda表达式,最后将执行结果存入一个新的流中。
List<Person> result = list.stream()
.map(Person::getName)
.collect(toList());
anyMatch
anyMatch用于判断流中是否存在至少一个元素满足指定的条件,这个判断条件通过Lambda表达式传递给anyMatch,执行结果为boolean类型。
如,判断list中是否有学生:
boolean result = list.stream()
.anyMatch(Person::isStudent);
是否匹配所有元素:allMatch
allMatch用于判断流中的所有元素是否都满足指定条件,这个判断条件通过Lambda表达式传递给anyMatch,执行结果为boolean类型。
如,判断是否所有人都是学生:
boolean result = list.stream()
.allMatch(Person::isStudent);
是否未匹配所有元素:noneMatch
noneMatch与allMatch恰恰相反,它用于判断流中的所有元素是否都不满足指定条件:
boolean result = list.stream()
.noneMatch(Person::isStudent);
获取任一元素findAny
findAny能够从流中随便选一个元素出来,它返回一个Optional类型的元素。
Optional<Person> person = list.stream()
.findAny();