본문 바로가기
개발/Java

[Java] 두 개의 List를 stream을 사용해서 비교하기

by yhyuk 2021. 10. 28.
728x90
반응형

List를 비교하는 방법은 여러가지가 있다. 오늘은 java8부터 제공하는 stream을 사용해서 비교하는 방법을 알아보려고 한다.

 

예제1. List 2개를 각각 비교해 중복 되지 않은 값 찾기

void listTest() {
    List<String> oldList = Arrays.asList("1", "2", "3", "4");
    List<String> newList = Arrays.asList("3", "4", "5", "6");

    List<String> resultList1 = oldList.stream()
                            .filter(old -> newList.stream().noneMatch(Predicate.isEqual(old)))
                            .collect(Collectors.toList());

    System.out.println(resultList1); // [1, 2]


    List<String> resultList2 = newList.stream()
                            .filter(new -> oldList.stream().noneMatch(Predicate.isEqual(new)))
                            .collect(Collectors.toList());

    System.out.println(resultList2); // [5, 6]
}
  • noneMatch: 중복 X
  • anyMatch: 중복 O

 

예제2. List 2개를 id만 비교하여 중복되지 않은 값 찾기

public static class User {
    private String id;
    private String name;
    
    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }

}
void listTest() {
    List<User> targetList = Arrays.asList(new User("10001", "홍길동"), new User("10002", "아무개"), new User("10003", "하하하"));
    List<User> filterList = Arrays.asList(new User("10003", "홍길동"), new User("10002", "호호호"));

    List<User> resultList = targetList.stream()
                            .filter(_this -> 
                            		filterList.stream().noneMatch(target -> _this.getId().equals(target.getId())))
                            .collect(Collectors.toList());

    System.out.println(resultList); // User[id=10001, name=홍길동]
}
  • 위 예제1에서 사용한 Predicate.isEqual이 아닌 User 객체의 필요한 값(id)를 불러서 사용해서 비교한다.
728x90
반응형

댓글