2016-09-27 1 views
-1

나는 '카메라 플래시 결함'과 '손상된 카메라 하우징'과 함께 목록에 변환 할표시 중복 번 자바 객체 목록에서 속성 값을

enter image description here

다음과 같이 자바 객체의 목록을 가지고 아래의 것과 같이 첫 번째 객체에 대해 한 번만

enter image description here

여기에 언급 된 솔루션과 함께 할 수있는 뭔가가 있나요? Remove duplicates from a list of objects based on property in Java 8

+2

유일한 값을 가진 콜렉션은 당신이 세트를 찾고 있다는 것을 암시합니다 :'new HashSet <> (list)' – nbrooks

+2

왜 첫 번째 속성을 지우고 싶습니까? 너를 괴롭 히 느냐? 그 뒤에 어떤 문제가 있습니까? 그것은 [XY 문제] (http://xyproblem.info/)에 대한 좋은 후보자처럼 보입니다. – Spotted

+1

정말로 하나의 목록에서 위치에 따라 객체를 수정하는 것이 좋습니다. 이 객체들이 다른 목록에 다른 순서로 포함되어 있다면? 목록에서 첫 번째 개체를 제거하면 어떻게 될까요? – Holger

답변

0

일부 중복 ID가있는 Employee의 예를 들고 있습니다.

는 중복을 허용하지 않습니다 HashSet,로 추가

List<Employee> employee 

등의 목록을 가지고 말할 수 있습니다.

HashSet<Object> seen=new HashSet<>(); 
employee.removeIf(e->!seen.add(e.getID())); 
+0

FallAndLearn 1,890 ● 1 ● 3 ● 그룹화됩니다 15 \t 내가 같은 속성 값으로 개체를 제거하지 않으 \t, 나는 두 번째 목록에서처럼, 하늘의 속성 값을 유지하지만, 만들고 싶어 나는 게시했다. 그 객체가 중복되어 있다는 것을 의미하지는 않습니다. 다른 값을 가질 수있는 더 많은 속성을 가지고 있습니다. – Nevin

1

당신은 모든 속성을 추가 할 수 있습니다 Set 값이 세트에 이미있는 경우 당신이의 속성을 비워 설정할 수 있도록, false를 반환 add 방법을 (설정은 중복을 허용하지 않습니다) 개체 : 또 다른 그룹이다

Set<String> values = new HashSet<>(); 
for (MyObject obj : myList) { 
    if (!values.add(obj.getValue())) { 
     obj.setValue(""); 
    } 
} 

동일한 속성 값을 갖는 모든 객체는, 각 그룹의 첫 번째 요소를 생략하고 그룹 내의 다른 모든 객체 빈 특성 값을 설정

myList.stream() 
     .collect(Collectors.groupingBy(MyObject::getValue)) 
     .forEach((k, v) -> v.stream().skip(1).forEach(o->o.setValue(""))); 
,
+0

David, 두 번째 해결책은 원하는 방식으로 첫 번째 열이있는 목록을 가져 오는 것이지만 놀랍게도 던지는 java.sql.SQLSyntaxErrorException : ORA-00942 : 더 이상 데이터베이스를 가져 오지 않아도 해당 목록을 사용하려고하면 표나보기가 존재하지 않습니다. 가져온 후 목록을 처리하고 있습니다. – Nevin

관련 문제