91名师指路-头部
91名师指路

java8自定义排序顺序

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

需求:有时候我们想要的排序,既不是根据某个字段按照升序或降序排列,而是按照人为指定的顺序进行排序,毫无规则可言,此时自定义排序就显得很重要了。


方法一:自定义排序

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

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部