2017-11-10 2 views
0

두 개체가 있는데 둘 다 비교할 필 수 4 개의 유사한 필드가 있습니다. 다른 원본에서 개체 목록으로 가져옵니다. 두 필드에 일치하는 하나 이상의 개체가 있는지 확인하고 싶습니다. 동일한 필드가있는 것과 같습니다. 문제는 서로 다른 순서 일 수 있다는 것입니다. 내가 루프다른 개체의 2 목록의 여러 필드 비교

나는 아무것도 존재하지 않는 경우, 오브젝트 1에서 모두 같은 필드가 적어도 하나 명의 일치하는 행이 있는지 확인하기 위해리스트 2의 모든 반복 기본적으로
for(Object1 object1 : list1){ 
    bool match = false; 
    for(Object2 object2 : list2){ 
     if(object1.getField1().equal(object2.getField1()) && etc etc..){ 
      match = true; 
      break; 
     } 
    } 
    if(!match) 
     return false 
} 
return true; 

두 가지를 가지고 어디 그럼이 코드를 가지고 false를 반환하면 일치하는 행이 있으면 list1의 모든 행을 검사 할 때까지 다음 행으로 이동합니다.

이 검사 방법이 마음에 들지 않아 검사가 쉬운 방법이 있는지 궁금합니다. 내가 자바 8 스트림을 사용하여 들었지만이 시나리오에서 사용하는 방법을 생각할 수 없습니다. 어떤 도움이라도 대단히 감사하겠습니다. 감사합니다.

+0

당신이 목록의 각 객체를 정의하는 클래스를 작성 했습니까? –

+0

@BillHorvath, 혼란 스럽네요, 객체 중 하나의 toString을 의미합니까? 또는 클래스에서 각 객체를 가져 오는 클래스? – anonuser1234

+0

죄송합니다. 명확하지 않은 경우. 목록의 각 개체는 네 개의 필드가있는 클래스의 인스턴스입니다. 수업을 썼니? 또는 java.util, org.springframework 등과 같은 라이브러리에서 가져온 것입니까? –

답변

0

이 사용할 수 있습니다 : 정적 방법

boolean isMatchs = list1.stream() 
     .allMatch(el1 -> list2.stream().anyMatch(el2 -> equals(el1, el2))); 

은 다음과 같이 같습니다 :

static boolean equals(Object1 a, Object2 b) { 
    return Objects.equals(a.getField1(), b.getField1());// && ... 
}