stream().filter() 找出user对象age等于18的人
时间: 2023-07-21 16:27:30 浏览: 43
假设有一个包含User对象的列表,每个User对象包含name和age属性,我们想要过滤出其中所有age等于18的人,并将他们的name打印出来。
可以使用 Java 8 中的 Stream API 的 filter 方法来实现这个功能。具体代码如下:
```java
List<User> users = Arrays.asList(
new User("Alice", 20),
new User("Bob", 18),
new User("Charlie", 22),
new User("David", 18),
new User("Eva", 19)
);
users.stream()
.filter(user -> user.getAge() == 18)
.forEach(user -> System.out.println(user.getName()));
```
上述代码中,我们使用 filter 方法过滤出age等于18的User对象,最后使用 forEach 方法将符合条件的User对象的name打印出来。
输出结果为:
```
Bob
David
```
相关问题
java stream 流实现两个List<User> 过滤掉 name和age都相同的数据
要使用Java Stream流过滤掉两个List<User>中name和age都相同的数据,可以使用filter和noneMatch方法来实现。下面是一个示例代码:
```java
List<User> list1 = new ArrayList<>(); // 第一个List<User>
List<User> list2 = new ArrayList<>(); // 第二个List<User>
// 假设已经将数据添加到list1和list2中
List<User> filteredList = list1.stream()
.filter(user1 -> list2.stream()
.noneMatch(user2 -> user2.getName().equals(user1.getName()) && user2.getAge() == user1.getAge()))
.collect(Collectors.toList());
```
上述代码使用Java Stream流的filter方法对第一个List<User>进行过滤操作。在filter方法中,使用noneMatch方法对第二个List<User>进行遍历匹配,判断name和age是否都相同。
如果在第二个List<User>中没有找到与第一个List<User>中name和age都相同的数据,那么就保留该数据。最后使用collect(Collectors.toList())将过滤后的数据收集到一个新的List中。
这样,filteredList就是过滤掉name和age都相同的数据后的结果列表。
希望对您有所帮助!如果还有其他问题,请随时提问。
stream流去重对象中的某个元素
在 Java 中,如果要对一个对象列表中的某个元素进行去重,可以使用 Stream 的 distinct() 方法和 map() 方法结合使用。具体实现步骤如下:
1. 首先定义一个对象类,例如:
```
public class User {
private String name;
private int age;
// 构造方法和 getter/setter 略
}
```
2. 假设有一个 List<User> 类型的列表,现在要按照 name 字段进行去重,可以使用以下代码:
```
List<User> userList = Arrays.asList(
new User("Tom", 20),
new User("Jerry", 18),
new User("Tom", 25),
new User("Lucy", 22),
new User("Jerry", 18)
);
List<User> distinctList = userList.stream()
.map(user -> user.getName()) // 将 User 对象映射为 name 字段
.distinct() // 进行去重操作
.map(name -> userList.stream()
.filter(user -> user.getName().equals(name)) // 根据 name 进行过滤
.findFirst().get())
.collect(Collectors.toList()); // 将结果转换为 List
System.out.println(distinctList);
```
在上述代码中,首先使用 map() 方法将 User 对象映射为 name 字段,接着使用 distinct() 方法进行去重操作。然后再次使用 map() 方法,将 name 字段映射回 User 对象,并使用 filter() 方法根据 name 字段进行过滤。最后使用 findFirst() 方法获取符合条件的第一个元素,并使用 collect() 方法将结果转换为 List。运行上述代码后,输出结果为:
```
[User{name='Tom', age=20}, User{name='Jerry', age=18}, User{name='Lucy', age=22}]
```
可以看到,输出结果中已经按照 name 字段进行了去重。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)