반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스프링부트테스트
- Java 1.8
- log error
- springboot
- java version
- xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
- springboottest
- xcrun: error: invalid active developer path
- LeetCode
- java 여러개 버전
- tls프로토콜확인
- yum install java
- JUnit
- statement.executequery() cannot issue statements that do not produce result sets.
- ssl이란?
- java 11
- ssl프로토콜확인
- mac os git error
- parse
- aws
- No tests found for given includes
- java 버전 변경
- mysql executequery error
- easy
- Medium
- java 1.8 11
- error
- OpenFeign
- AWS CLI
- java
Archives
- Today
- Total
쩨이엠 개발 블로그
[ Java ] java8 list 비교 본문
728x90
반응형
요즘 stream 쓰는게 재밌다
뭔가 코드 간결해보이고(그렇진 않지만)
더 성능 좋아보이고 (그것도 아니지만)
그래서 이번에도 stream을 써서 list를 비교해보기로 했다
이번에 내가 해야할 일은 두 개의 List를 비교하여 있던건 추가하고 없던건 제거할 예정이다
@Test
void testData(){
List<String> targetList = Arrays.asList("a1", "a2", "a3", "a4");
List<String> filterList = Arrays.asList("a3", "a4", "a5", "a6");
List<String> filteredList = targetList.stream()
.filter(target -> filterList.stream().noneMatch(Predicate.isEqual(target)))
.collect(Collectors.toList());
System.out.println(filteredList); //[a1, a2]
List<String> filteredTargetList = filterList.stream()
.filter(target -> targetList.stream().noneMatch(Predicate.isEqual(target)))
.collect(Collectors.toList());
System.out.println(filteredTargetList); //[a5, a6]
}
String 타입의 list를 비교하기 위해서 이번에 쓴 함수는 noneMatch
저렇게 보면 뭔가 잘되는것같다 싶지만 사실 이중포문 도는걸 좀 형식을 바꾼거라 ㅋㅋㅋㅋㅋ
그래서 한큐에 끝나니까 잘되는것같기도하고?? ㅋㅋㅋㅋ
리스트 안에 들어간 타입이 String이라 Predicate.isEqual을 써도 비교가 가능했지만 만약 String이 아닌 Object라면?
@Builder
@Data
public static class TestData{
private String id;
private String value;
}
이런 TestData 생성자를 만들어본다
id와 value값을 설정한 뒤 돌리면 리스트 비교가 되지 않는다
난 id 하나만을 비교하고 싶다면??
@Test
void testData(){
List<TestData> targetList = Arrays.asList(TestData.builder().id("a1").value("a1").build(), TestData.builder().id("a2").value("a1").build());
List<TestData> filterList = Arrays.asList(TestData.builder().id("a3").value("a3").build(), TestData.builder().id("a2").value("a2").build());
System.out.println(filteredList);
List<TestData> filteredTargetList = filterList.stream()
.filter(filter -> targetList.stream()
.noneMatch(target ->filter.getId().equals(target.getId())))
.collect(Collectors.toList());
System.out.println(filteredTargetList);
}
이런식으로 Predicate.isEqual 대신에 id만 불러서 비교해주면 간단하게 끝!
콘솔 화면
[ApplicationTests.TestData(id=a1, value=a1)]
[ApplicationTests.TestData(id=a3, value=a3)]
728x90
반응형
'개발 > JAVA' 카테고리의 다른 글
[ TCP ] TCP Server 만들기 (1) | 2021.01.05 |
---|---|
[ java ] sdkman으로 자바 버전 관리하기 (0) | 2020.10.17 |
Java 자릿수 맞추기 ( 숫자 0 넣기 ) (0) | 2020.05.26 |
Input length must be multiple of 16 when decrypting with padded cipher (0) | 2020.05.18 |
the request was rejected because no multipart boundary was found error (0) | 2020.05.12 |
Comments