Stream取字段转为set
时间: 2024-10-25 18:11:50 浏览: 18
在Java中,Stream API 提供了一种简洁的方式来处理集合数据并转换它们。如果你想将Stream中的每个元素的一个字段提取出来,并转化为一个Set,可以使用`collect`方法结合`Collectors.toSet()`收集器。
例如,假设你有一个Person类,包含一个名字字段name:
```java
class Person {
String name;
//...
}
```
你可以这样做来获取所有人的名字并放入一个Set中:
```java
List<Person> people = ...; // 假设这是包含Person对象的列表
Set<String> names = people.stream() // 使用stream()
.map(Person::getName) // 对每个Person对象,提取名字字段
.collect(Collectors.toSet()); // 将名字集合化为Set
// 现在names Set里就包含了所有Person对象的不同名字
```
这里的关键点是`map`函数,它应用了一个Lambda表达式`Person::getName`,这是一个方法引用,表示对每个Person对象调用其`getName`方法。
相关问题
java将集合某个字段转为新集合并且去重
可以使用Java 8的Stream API来实现将集合某个字段转为新集合并且去重的功能。以下是一个示例代码:
假设有一个Student类,其中有两个字段name和age,现在有一个List<Student>集合,需要将所有学生的姓名(name字段)转为新的Set<String>集合并去重。
```java
List<Student> students = new ArrayList<>();
// 添加学生到students集合中
Set<String> names = students.stream()
.map(Student::getName) // 提取name字段
.distinct() // 去重
.collect(Collectors.toSet()); // 转为Set集合
```
这样就可以将所有学生的姓名转为新的Set<String>集合并去重了。
List<String> gatherTimeList = eSResponseList.stream() .map(DevPortReportEsDTO::getGatherTime) // 获取目标字段的值 .distinct() // 去重 .collect(Collectors.toList()); // 转为列表 改成set集合
你的问题是将上述代码中的列表转换为集合,正确吗?
如果是的话,可以将最后一行的代码改为:
```
.collect(Collectors.toSet()); // 转为集合
```
这样就可以将列表转换为集合并去重。
阅读全文