최근 두개의 ArrayList의 아이템을 비교해, 추가되는 아이템과 삭제되는 아이템을 구분할 필요가 있어서 만들었습니다.
조건
- list1 = [a, b, c, d] =>새로 받아온 ArrayList
- list2 = [a, b, e] => 기존 DB 있던 데이터를 담은 ArrayList
- 기존 리스트에 영향을 주지 않으며, 새로운 리스트를 생성해 리턴해야 한다.
1 | ArrayList<String> resultList = compageAndDel(list1, list2); |
위의 코드로 새로 추가될 아이템과 DB에 있었지만 삭제될 아이템을 구분할 수 있습니다.
만약 기존 리스트에 영향을 줘도 된다면 다음과 같이 작성합니다.
1 | // list1기준 삭제된 요소 리턴 |
+2019.7.6 추가
자바8 람다를 이용해 위 코드를 다음과 같이 리팩토링 해 봤습니다.
1 | List<String> list1 = new ArrayList<>(Arrays.asList("a", "b", "c", "d")); |
과거 코드와 비교해 소스가 깔끔하게 정리된 것을 알 수 있습니다.
스칼라로는 다음과 같이 작성할 수 있습니다.
+scala 버전
val diff1 = list1.diff(list2) //Set(c, d)
val diff2 = list2.diff(list1) //Set(e)
// 공통 아이템만 리턴
var match1 = list1.intersect(list2) // Set(a, b)
읽어주셔서 감사합니다. 혹 오류/문의할 내용이 있다면 코멘트 남겨주세요!🙆