728x90
Exception 내용
Duplicate key 001 (attempted merging values sample.cafekiosk.spring.domain.product.Product@6b5fdbd0 and sample.cafekiosk.spring.domain.product.Product@2100b770)
java.lang.IllegalStateException: Duplicate key 001 (attempted merging values sample.cafekiosk.spring.domain.product.Product@6b5fdbd0 and sample.cafekiosk.spring.domain.product.Product@2100b770)
at java.base/java.util.stream.Collectors.duplicateKeyException(Collectors.java:135)
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:182)
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at sample.cafekiosk.spring.api.service.order.OrderService.findProductsBy(OrderService.java:36)
at sample.cafekiosk.spring.api.service.order.OrderService.createOrder(OrderService.java:26)
at sample.cafekiosk.spring.api.service.order.OrderServiceTest.createOrder(OrderServiceTest.java:65)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
문제가 된 부분
List<Product> products = productRepository.findAllByProductNumberIn(productNumbers);
Map<String, Product> productMap = products.stream()
.collect(Collectors.toMap(Product::getProductNumber, p -> p));
productRepository.findAllByProductNumberIn의 결과를 Map으로 바꿔주는 과정에서 발생한 에러다.
결과인 products에서 key를 Product::getProductNumber로 value를 Product로 변환해주는 과정에서 key값이 중복이 될 때 발생한 문제다.
key가 중복이 되는지를 체크하는 것이 필요하다!
728x90
'language > JAVA' 카테고리의 다른 글
[JAVA] 배열, 스트림 활용 (0) | 2024.06.22 |
---|---|
[JAVA] 제네릭(Generic), 제네릭 클래스, 제네릭 메서드, 와일드카드 (0) | 2024.06.22 |
[JAVA] Garbage Collection (0) | 2024.03.26 |
[JAVA] Overriding 과 Overloading 의 차이점 (0) | 2024.02.19 |
[JAVA] Comparator, Comparable로 배열과 List를 정렬하기 (0) | 2024.02.16 |