【发布时间】:2018-05-22 18:40:58
【问题描述】:
我有两个这样的列表实例:
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 实现这一点吗?
【问题讨论】:
-
表示中的等号不应该是逗号吗?
-
@Matt,因为它是地图的系统输出,所以它宁愿打印相等而不是逗号
标签: java java-8 java-stream