原 java8自定义排序顺序
版权声明:本文为博主原创文章,请尊重他人的劳动成果,转载请附上原文出处链接和本声明。
本文链接:https://www.91mszl.com/Dream/article/details/1467
需求:有时候我们想要的排序,既不是根据某个字段按照升序或降序排列,而是按照人为指定的顺序进行排序,毫无规则可言,此时自定义排序就显得很重要了。
public static void main(String[] args) {
List<String> sortList = Arrays.asList("王五", "张三", "李四"); // 自定义排序顺序
List<UserInfo> list=new ArrayList<>();
UserInfo d1=new UserInfo();
d1.setName("张三");
UserInfo d2=new UserInfo();
d2.setName("李四");
UserInfo d3=new UserInfo();
d3.setName("王五");
list.add(d1);
list.add(d2);
list.add(d3);
// 使用Comparator.comparing(sortList::indexOf) 参数进行自定义排序
List<UserInfo> collect1 = list.stream().sorted(Comparator.comparing(UserInfo::getName, Comparator.comparing(sortList::indexOf))).collect(Collectors.toList());
System.out.println(collect1);
}
执行结果:
[UserInfo(name=王五), UserInfo(name=张三), UserInfo(name=李四)]
public static void main(String[] args) {
List<String> sortList = Arrays.asList("王五", "张三", "李四"); // 自定义排序顺序
List<UserInfo> list=new ArrayList<>();
UserInfo d1=new UserInfo();
d1.setName("张三");
UserInfo d2=new UserInfo();
d2.setName("李四");
UserInfo d3=new UserInfo();
d3.setName("王五");
list.add(d1);
list.add(d2);
list.add(d3);
Map<String, List<UserInfo>> collect = list.stream().collect(Collectors.groupingBy(item -> item.getName()));
List<Map.Entry<String, List<UserInfo>>> collect1 = collect.entrySet().stream().sorted(Comparator.comparing(k -> k.getKey(), Comparator.comparing(sortList::indexOf))).collect(Collectors.toList());
System.out.println(collect1);
}
执行结果:
[王五=[UserInfo(name=王五)], 张三=[UserInfo(name=张三)], 李四=[UserInfo(name=李四)]]
2024-01-30 09:08:57 阅读(333)
名师出品,必属精品 https://www.91mszl.com
博主信息