trungitdn92 :
나는 자바 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 + '\'' +
'}';
}
}
내가 좋아하는이 개 목록의 모양을 가지고 :
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"));
지금은 스트림 자바 8 루프이 목록을 사용하여 비교합니다. 목록 사람의 모든 개체가 persons1와 동일하면, 나는 새 목록을 만들고 새로운 값으로 설정합니다. 예 : 만약 PERSON1 ( "1", "F")는 사람과 동일 ( "1", "A") 내가 사용하기 때문에 ID를 내가 사람을 PERSON1 세트에서 이름을 얻을 비교합니다. 사람 ( "1,"F ")을하고 그것을 두 가지 새로운 목록을 추가 : 결과.
난에 사용 내 코드 :
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에서 개체에서 설정 이름을합니다. 나는 우리가 스트림 자바 8 맵을 사용 할 수 있습니다 알고하지만 난 그렇게 할 수없는 방법에 대해 설명합니다. 도와주세요
라빈 드라 Ranwala :
일부 작업은 최선의 반복과 스트림, 다른 사람과 수행됩니다. 대부분의 작업은 가장 두 가지 방법을 결합하여 수행됩니다. 이 솔루션에서 스트림지도를 구성하는 데 사용 된 후 반복이 일치하는 사람의 이름을 업데이트하는 데 사용됩니다. 귀하의 솔루션은 선형 시간 복잡도에서이 솔루션을 실행하는 반면 이차 시간에 실행됩니다.
Map<String, String> idToNameMap = persons1.stream()
.collect(Collectors.toMap(Person1::getId, Person1::getName, (a, b) -> a));
for (Person person : persons) {
if (idToNameMap.containsKey(person.getId())) {
person.setName(idToNameMap.get(person.getId()));
}
}