Java list stream filter里面如何写逻辑
时间: 2024-10-19 15:09:06 浏览: 25
在Java的`List`上使用`stream()`方法创建流后,`filter()`方法允许你应用一个谓词(Predicate),这个谓词会对流中的每个元素进行评估,只保留满足条件的元素。基本的语法如下:
```java
List<String> list = ...; // 例如一个字符串列表
List<String> filteredList = list.stream()
.filter(predicate)
.collect(Collectors.toList());
```
这里的`predicate`是一个实现了`Predicate<T>`接口的函数或lambda表达式,`T`代表流元素的类型。下面是一些常见的过滤逻辑例子:
1. **基于单个字段的过滤**:
```java
Predicate<String> startsWithA = s -> s.startsWith("A");
List<String> startsWithAList = list.stream().filter(startsWithA).collect(Collectors.toList());
```
2. **基于复杂条件的过滤**:
```java
Predicate<String> isLongEnough = s -> s.length() > 5;
List<String> longEnoughList = list.stream().filter(isLongEnough).collect(Collectors.toList());
```
3. **使用lambda表达式**:
```java
List<String> evenLengthStrings = list.stream()
.filter(s -> s.length() % 2 == 0) // 只保留长度为偶数的字符串
.collect(Collectors.toList());
```
4. **结合多个条件**:
```java
Predicate<String> startsWithAOrLowerCase = s -> s.startsWith("a") || s.toLowerCase().startsWith("a");
List<String> startsWithALowerCaseList = list.stream().filter(startsWithAOrLowerCase).collect(Collectors.toList());
```
记住,`filter()`方法并不会改变原列表,而是返回一个新的流,包含了经过过滤后的元素。
阅读全文