.stream().filter( 去除空
时间: 2024-03-06 16:45:31 浏览: 24
stream().filter(去除空)是Java 8中的一个流操作,用于过滤掉流中的空元素。在这个操作中,我们可以使用lambda表达式或方法引用来定义过滤条件。
例如,假设我们有一个包含字符串的流,我们想要过滤掉其中的空字符串,可以使用以下代码:
```
List<String> list = Arrays.asList("apple", "", "banana", "", "orange");
List<String> filteredList = list.stream()
.filter(str -> !str.isEmpty())
.collect(Collectors.toList());
```
在上面的代码中,我们使用`filter`方法来过滤掉空字符串,`!str.isEmpty()`是过滤条件,表示只保留非空字符串。最后,我们使用`collect`方法将过滤后的结果收集到一个新的列表中。
相关问题
list.stream去掉某个元素
你可以使用 `filter` 方法来移除列表中的特定元素。以下是使用 `filter` 方法移除某个元素的示例代码:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int elementToRemove = 3;
List<Integer> result = numbers.stream()
.filter(number -> number != elementToRemove)
.collect(Collectors.toList());
System.out.println(result); // [1, 2, 4, 5]
```
在这个例子中,我们创建了一个整数列表 `numbers`,然后使用 `stream()` 方法将其转换为流。接着使用 `filter` 方法,传入一个 lambda 表达式作为参数,该表达式用于判断元素是否与要移除的元素相等。最后,我们使用 `collect` 方法将过滤后的元素收集到一个新的列表中,并打印输出结果。
这样就可以通过 `filter` 方法从 `list.stream()` 中移除特定的元素。
.stream怎么去重
Java 8 中的 Stream 提供了多种去重方式,包括使用 distinct() 方法、collectingAndThen() 和 toCollection() 方法以及 filter() 方法。其中,distinct() 方法是最简单的一种方式,它可以去除 Stream 中重复的元素。collectingAndThen() 和 toCollection() 方法可以将 Stream 中的元素收集到一个集合中,并去除其中的重复元素。filter() 方法可以根据指定条件过滤掉 Stream 中的重复元素。
下面是具体的实现方法:
1. 使用 distinct() 方法
```java
List<Integer> list = Arrays.asList(1, 2, 3, 2, 4, 3, 5);
List<Integer> distinctList = list.stream().distinct().collect(Collectors.toList());
System.out.println(distinctList); // [1, 2, 3, 4, 5]
```
2. 使用 collectingAndThen() 和 toCollection() 方法
```java
List<User> userList = Arrays.asList(new User("Tom"), new User("Jerry"), new User("Tom"));
List<User> distinctUserList = userList.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getName))),
ArrayList::new
)
);
System.out.println(distinctUserList); // [User{name='Jerry'}, User{name='Tom'}]
```
3. 使用 filter() 方法
```java
List<User> userList = Arrays.asList(new User("Tom"), new User("Jerry"), new User("Tom"));
List<User> distinctUserList = userList.stream().filter(
distinctByKey(User::getName)
).collect(Collectors.toList());
System.out.println(distinctUserList); // [User{name='Tom'}, User{name='Jerry'}]
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
```