我正在尝试收集对象中字段之一的不同值。我希望在流中使用
distinct()
,但它不能应用于现场级别。我已经使用 Map 来获取映射到对象的列表。有没有办法只获取字段列表?
我有带有 ManagerId 的 Employee 对象,我想收集不同的 ManagerId 列表。
我的地图解决方案
Map<Long, Employee> employeeMap =employees.stream()
.collect(Collectors.toMap(Employee::getManagerId, Function.identity(), (o, n) -> n);
我正在寻找
List<Long> managerIds = .....
您可以使用流上的
distinct()
方法收集 ID:
List<Long> managerIds = employees.stream()
.map(Employee::getManagerId)
.distinct()
.toList();
这是一个基本的代码片段:
import java.util.List;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
List<Employee> employees = List.of(
new Employee(1L, "Alice", 10L),
new Employee(2L, "Bob", 20L),
new Employee(3L, "Charlie", 10L),
new Employee(4L, "David", 30L),
new Employee(5L, "Eve", 20L)
);
List<Long> uniqueManagerIds = findUniqueManagerIds(employees);
System.out.println("Unique Manager IDs: " + uniqueManagerIds);
// Output: [10, 20, 30]
}
public static List<Long> findUniqueManagerIds(List<Employee> employees) {
return employees.stream()
.map(Employee::getManagerId)
.distinct()
.toList();
}
}
public static class Employee {
private Long id;
private String name;
private Long managerId;
public Employee(Long id, String name, Long managerId) {
this.id = id;
this.name = name;
this.managerId = managerId;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public Long getManagerId() {
return managerId;
}
@Override
public String toString() {
return String.format("Employee{id=%d, name='%s', managerId=%d}", id, name, managerId);
}
}