我将翻译以下内容:
现在我想将它转换为具有新列表外观的流:
我使用Java 8,有两个对象如下:
Person类:
public class Person {
private String id;
private String name;
public Person() {
}
public Person(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
Person1类:
public class Person1 {
private String id;
private String name;
public Person1() {
}
public Person1(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person1{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
I have two list look like :
List<Person> persons= Arrays.asList(new Person("1","A"),new Person("2","B"));
List<Person1> persons1 = Arrays.asList(new Person1("3","C"),new Person1("1","F"));
现在我想使用Java 8流循环两个列表并进行比较。如果列表中的任何一个对象与persons1相等,我将创建一个新列表并将其设置为新值。例如:如果Person1(“1”,“F”)等于Person(“1”,“A”),因为我使用id进行比较,我从Person1获取姓名并设置到Person上。结果:Person(“1,“F”)并将其添加到新列表中。
当我使用for循环时,我的代码如下:
for (Person person : persons) {
for (Person1 person1 : persons1 ) {
if (person1.getId().equals(person.getId())) {
person.setName(person1.getId());
break;
}
}
}
现在我想将它转换为具有新列表外观的流:
List<Person> personList =
list.stream()
.filter (
person -> list1.stream()
.anyMatch(person1 -> person1.getId()== person.getId()))
.collect(Collectors.toList());
但它仅过滤人员。我想比较两个列表对象。如果ID相同,则将persons1对象中的名称设置为persons对象中的名称。我知道我们可以在Java 8流中使用映射,但我不知道如何做到这一点。请帮助