使用steam().sorted(Comparator.comparing())对List
异常代码如下:
- customerVOList = customerVOList.stream()
- .sorted(Comparator.comparing(CustomerVOVO::getCustomerRate).reversed())
- .collect(Collectors.toList());
getCustomerRate 是String类型的,存的是double类型的值,要根据这个字段倒序返回,发现这种方法排序是乱的。
解决方案一
- // 把String类型字段转换成Double类型进行自然升序排序
- customerVOList = customerVOList.stream()
- .sorted(Comparator.comparingDouble(v -> Double.valueOf(v.getCustomerRate())))
- .collect(Collectors.toList());
- // 先自然排序然后再倒序
- Collections.reverse(customerLoanMapVOList);
这种方案需要先把String类型转换成Double类型自然升序排序后再使用Collections对集合进行倒序,reversed()用不了,用了就报错 "Cannot resolve method 'getCustomerRate' in 'Object'"。
解决方案二
- customerVOList = customerVOList.stream()
- .sorted((v1,v2) -> Double.valueOf(v2.getCustomerRate()).compareTo(Double.valueOf(v1.getCustomerRate())))
- .collect(Collectors.toList());
直接不要Comparator,一段代码搞定。
延伸
使用steam().sorted(Comparator.comparing())对自定义对象集合中的字段进行排序,避免直接对String类型字段进行自定义规则排序,可能会出现未知问题。