hotels.stream().sorted(Comparator.comparing(Hotel::getCity)
.thenComparing(hotel -> hotel.getName().toUpperCase())))
.collect(Collectors.toList());
请问是否有一种更简洁的编写.thenComparing(hotel -> hotel.getName().toUpperCase())
的方法,我找到了String.CASE_INSENSITIVE_ORDER
,但是如何在hotel.getName()
上使用此比较器。
更新: 应用了@Arnaud Denoyelle的建议。
hotels.stream().sorted(Comparator.comparing(Hotel::getCity)
.thenComparing(Hotel::getName, String.CASE_INSENSITIVE_ORDER))
.collect(Collectors.toList());
看起来更好。
答案 0 :(得分:15)
String.CASE_INSENSITIVE_ORDER
是Comparator<String>
,但是您正在尝试比较一些Hotel
。
您可以这样获得Comparator<Hotel>
:
// Map hotel to a String then use the Comparator<String>
Comparator.comparing(Hotel::getName, String.CASE_INSENSITIVE_ORDER);
然后,如果只需要排序,则不需要使用Stream
,则可以直接排序:
hotels.sort(Comparator.comparing(Hotel::getName, String.CASE_INSENSITIVE_ORDER));
因此,根据第一个比较标准,代码变为:
hotels.sort(
Comparator.comparing(Hotel::getCity)
.thenComparing(Hotel::getName, String.CASE_INSENSITIVE_ORDER)
)
答案 1 :(得分:0)
您应为 thenComparing 链接方法提供另一个比较器,如下所示:
hotels.stream().sorted(Comparator.comparing(Hotel::getCity)
.thenComparing(Comparator.comparing(Hotel::getName, String.CASE_INSENSITIVE_ORDER)))
.collect(Collectors.toList())