Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用共享id字段将两个不同的对象列表合并为一个_Java_Java 8_Java Stream - Fatal编程技术网

Java 使用共享id字段将两个不同的对象列表合并为一个

Java 使用共享id字段将两个不同的对象列表合并为一个,java,java-8,java-stream,Java,Java 8,Java Stream,我有两个不同的对象列表,如下所示: public class Person { private int id; private String name; private String surname; } public class Name { private int id; private String name; } 我的人员列表没有填写字段名。我需要将其与匹配字段id的名称列表合并 问题:如何使用Java 8 streams实现这一点的最佳方法?

我有两个不同的对象列表,如下所示:

public class Person {
    private int id;
    private String name;
    private String surname;
}

public class Name {
    private int id;
    private String name;
}
我的人员列表没有填写字段名。我需要将其与匹配字段id的名称列表合并


问题:如何使用Java 8 streams实现这一点的最佳方法?

您可以这样做:

 Map<Integer, String> map = names.stream().collect(Collectors.toMap(o -> o.id, o -> o.name));
 for (Person person : persons) {
    person.name = map.getOrDefault(person.id, "");
 }

假设姓名是您的姓名列表,人员是您的人员列表,如果找不到人员id,则默认名称为空字符串。

您可以这样做:

 Map<Integer, String> map = names.stream().collect(Collectors.toMap(o -> o.id, o -> o.name));
 for (Person person : persons) {
    person.name = map.getOrDefault(person.id, "");
 }
假设姓名是您的姓名列表,人员是您的人员列表,并且如果找不到人员id,则默认名称是空字符串。

首先,使用映射更适合访问名称对象,因此使用流是一种解决方案:

List<Person> personList = ...
List<Name> nameList = ...
Map<Integer,String> nameMap = nameList.stream()
.collect(Collectors.toMap(Name::getId,Name::getName));
personList.forEach(person -> person.setName(nameMap.getOrDefault(person.getId(), "")));
首先,使用映射更好地访问名称对象,因此在这里使用流是一个解决方案:

List<Person> personList = ...
List<Name> nameList = ...
Map<Integer,String> nameMap = nameList.stream()
.collect(Collectors.toMap(Name::getId,Name::getName));
personList.forEach(person -> person.setName(nameMap.getOrDefault(person.getId(), "")));

为什么要使用流呢?我使用JpaRepository从数据库中获取这两个列表。如果id不存在,我们可以存储一个空字符串,元素的顺序也不重要。为什么要使用streams?我使用JpaRepository从数据库中获取这两个列表。如果id不存在,我们可以存储一个空字符串,元素的顺序也无关紧要