使用java 8从年龄列表中的id列表

我是java的新手。我想获得列表中给出的具有特定年龄的员工的id列表。

我实际上想要使用java 8function来做到这一点,但我无法理解如何使用map和collect函数来获得所需的输出。

预期产量如下:

例如-

20-1,5 40-2 30-3 50-4 

我还想要,如果我们可以使用ids列表制作自定义类。我的真实场景基于自定义对象。我在基于列表中的唯一值检索某些值。

代码如下

 public class Emp { int id; int age; public Emp(int id, int age) { this.id = id; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class Demo { public static void main(String args[]) { List list = new ArrayList(); list.add(new Emp(1, 20)); list.add(new Emp(2, 40)); list.add(new Emp(3, 30)); list.add(new Emp(4, 50)); list.add(new Emp(5, 20)); List l = list.stream().map(t -> t.getAge()).distinct().collect(Collectors.toList()); System.out.print(l); } } 

你想要的是将它们group ,由Collectors.groupingBy完成。

  Map> map = list.stream().collect(Collectors.groupingBy(Emp::getAge, Collectors.mapping(Emp::getId, Collectors.toList()))); System.out.println(map); // {50=[4], 20=[1, 5], 40=[2], 30=[3]}