java stream 多个filter_java8中的stream().filter()的使用和Optional()
时间: 2023-07-21 07:05:24 浏览: 111
Java 8 中的 Stream API 提供了一种非常便利的方式来对集合进行操作,其中 filter() 方法用于过滤集合中不满足条件的元素。多个 filter() 方法可以连续使用,以便对集合进行多重过滤。
例如,假设有一个字符串列表,我们可以使用如下代码来过滤出长度大于等于3且以“a”开头的字符串:
```
List<String> strings = Arrays.asList("apple", "banana", "cat", "dog", "air", "bag");
List<String> filteredStrings = strings.stream()
.filter(s -> s.startsWith("a"))
.filter(s -> s.length() >= 3)
.collect(Collectors.toList());
System.out.println(filteredStrings); // [apple, air]
```
在这个例子中,我们使用两个 filter() 方法,第一个用于过滤以“a”开头的字符串,第二个用于过滤长度大于等于3的字符串。最终,我们使用 collect() 方法将过滤后的结果收集到一个列表中。
另外,Java 8 中还提供了 Optional 类,可以用于避免 null 值的问题。当我们使用 Optional 类时,可以使用 orElse() 或 orElseGet() 方法来指定默认值,以避免出现空指针异常。
例如,假设有一个方法用于查询某个用户的姓名,但如果该用户不存在,则返回 null。我们可以使用 Optional 类来避免 null 值的问题:
```
Optional<String> name = getUser().map(User::getName);
String result = name.orElse("Unknown");
System.out.println(result);
```
在这个例子中,如果 getUser() 方法返回一个存在的用户,则使用 map() 方法获取该用户的姓名并存储在 Optional 对象中。如果该用户不存在,则 name 对象将为空。最后,我们使用 orElse() 方法指定默认值“Unknown”,以避免出现空指针异常。
阅读全文