Java 8 람다 함수는 속성 값을 기반으로 목록의 중복 제거를 구현합니다.

2865 단어 java8lambdaliststream

프로젝트에서 java8을 사용하는 경우 목록의 특정 속성 값에 따라 중복 제거를 처리하는 매우 간단한 방법은 lamba 함수를 사용하는 것입니다. 예제 코드는 다음과 같습니다.

List<UcShopCourseBizPojo> unique = ucShopCourseBizPojoList.stream().collect(
 collectingAndThen(
 toCollection(() -> new TreeSet<>(comparingLong(UcShopCourseBizPojo::getId))), ArrayList::new));


compareLong 메소드는 pojo 클래스 UcShopCourseBizPojo에서 id에 따라 중복을 제거하고 id 속성의 데이터 유형이 Long이기 때문입니다. 이 방법은 보다 일반적인 방법으로 대체될 수 있습니다. 예제 코드는 다음과 같습니다.

List<UcShopCourseBizPojo> sLists = shopCourseLists.stream().collect(
        Collectors.collectingAndThen(Collectors.toCollection(
                () -> new TreeSet<>(Comparator.comparing(c -> c.getShopId()))), ArrayList::new)
);


그러나 이러한 가중치 필터링 방법은 단점이 있습니다. 즉, 획득한 목록이 매장 과정 목록을 획득하고 동일한 shopid로 과정을 중복 제거하는 것과 같이 매번 임의의 결과를 반환할 수 있다는 것입니다. 두 과정의 shopid가 같으면 매번 호출될 수 있다. 때때로 나는 이 코스로 돌아가고, 다른 코스로 돌아올 것이다. 근본적인 원인이 무엇인지 모르겠습니다. 이 방법은 참고용입니다. 이유 아시는분 쪽지 남겨주세요~

좋은 웹페이지 즐겨찾기