gpt4 book ai didi

java - 使用 Java 8 Streams 根据常见条件从两个不同列表创建 map

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:22:09 26 4
gpt4 key购买 nike

我有两个这样的列表实例:

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 对象,其中名称在两个列表中都相等对象。

所以,当我打印 map 时,它应该是这样的:

{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 实现这一点吗?

最佳答案

首先,假设您要创建一个 HashMap , 你的关键类 ( NameAndAge ) 必须覆盖 equalshashCode() .

其次,为了高效,我建议你先创建一个Map<String,NameAndSalary>从第二个List :

Map<String,NameAndSalary> helper =
nameAndSalaryList.stream()
.collect(Collectors.toMap(NameAndSalary::getName,
Function.identity()));

最后,您可以创建 Map你想要:

Map<NameAndAge,NameAndSalary> output = 
nameAndAgeList.stream()
.collect(Collectors.toMap(Function.identity(),
naa->helper.get(naa.getName())));

关于java - 使用 Java 8 Streams 根据常见条件从两个不同列表创建 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50474450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com