이름과 가격으로 제품을 비교하기 위해 Comparator를 구현할 방법을 찾고있었습니다. 여기에 유용한 정보가 많이 있습니다. How to sort by two fields in Java?을 찾고 비교기를 구현했습니다.메서드는 비교 자로 두 필드로 비교할 것이지만 하나만 주문합니다.
제품 이름을 올바르게 비교하지만 가격이 올바른 순서가 아닙니다. 알파벳순으로 가격을 오름차순으로 나열 할 예정입니다. 어떻게 구현할 수 있습니까? 내가 여기서 무엇을 놓치고 있니?
방법은
List<BaseProduct> sortedProductsList = StaticUtils.compareNamesAndPrices(products);
for (BaseProduct product : sortedProductsList) {
System.out.println(String.format("Product name: %s -> Price: %s", product.getProductName(), product.getPrice().toString()));
}
은 내가 '방법 테스트 이름과 가격
public static List<BaseProduct> compareNamesAndPrices(List<BaseProduct> baseProducts) {
Comparator<BaseProduct> productComparator = Comparator.comparing(BaseProduct::getProductName)
.thenComparing(Comparator.comparing(BaseProduct::getPrice));
return baseProducts.stream()
.sorted(productComparator)
.collect(Collectors.toList());
}
에 의해 비교 : 여기
는 지금까지했습니다 것입니다 다음 출력을 얻었습니다 :Product name: Bananas -> Price: 45
Product name: Galaxy 7 phone -> Price: 400
Product name: Xiaomi Mi5 -> Price: 370
출력은 어떻게되어야합니까? 당신이 공유하는 출력은 논리입니다, 나는 여기서 문제가있는 것을 보지 못합니다. –
출력은 이름과 가격으로 정렬됩니다! 가격순 정렬은 동일한 이름의 제품에만 관련됩니다. – Harald
알파벳순으로 이름을 올리고 가격을 오름차순으로 예상합니다. – samba