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
반응형
'개발 > Java' 카테고리의 다른 글
[Java] Java8에서의 날짜/시간 비교 (LocalDateTime) (0) | 2021.11.16 |
---|---|
[Lombok] @NoArgsConstructor, @AllArgsConstructor, @RequireArgsConstructor (0) | 2021.10.27 |
[Java] 깊은복사와 얕은복사(Call By Value & Call By Reference) (0) | 2021.10.27 |
[Java] 압축 파일 jar vs war (0) | 2021.10.18 |
[Java] 데이터 타입 Integer와 Int의 차이 (0) | 2021.10.03 |
댓글