У меня есть два списка таких экземпляров:
List<NameAndAge> nameAndAgeList = new ArrayList<>();
nameAndAgeList.add(new NameAndAge("John", "28"));
nameAndAgeList.add(new NameAndAge("Paul", "30"));
nameAndAgeList.add(new NameAndAge("Adam", "31"));
List<NameAndSalary> nameAndSalaryList = new ArrayList<>();
nameAndSalaryList.add(new NameAndSalary("John", 1000));
nameAndSalaryList.add(new NameAndSalary("Paul", 1100));
nameAndSalaryList.add(new NameAndSalary("Adam", 1200));
, где NameAndAge
равно
class NameAndAge {
public String name;
public String age;
public NameAndAge(String name, String age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + ": " + age;
}
}
, а NameAndSalary
равно
private class NameAndSalary {
private String name;
private double salary;
public NameAndSalary(String name, double salary) {
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
return name + ": " + salary;
}
}
Теперь,Я хочу создать карту с ключом как NameAndAge
объект из первого списка и значением NameAndSalary
из второго списка, где имя совпадает в обоих объектах.
Итак, когда я печатаю карту, это должно выглядеть так:
{John: 28=John: 1000.0}
{Paul: 30=Paul: 1100.0}
{Adam: 31=Adam: 1200.0}
Я пытался сделать это, но конечный тип возврата - 'void', поэтому я застрял в невежестве, поскольку я новичок в Streams.
nameAndAgeList
.forEach(n ->
nameAndSalaryList
.stream()
.filter(ns -> ns.name.equals(n.name))
.collect(Collectors.toList()));
Может кто-нибудь сообщить, как этого можно достичь с помощью Java Streams API?