1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Java8 Stream(6)List集合排序 多字段排序 Null值排序

Java8 Stream(6)List集合排序 多字段排序 Null值排序

时间:2020-08-31 09:04:45

相关推荐

Java8 Stream(6)List集合排序 多字段排序 Null值排序

一、单字段排序

先造点数据

pigs.add(new Pig(1, "猪爸爸", 31, "M", false));pigs.add(new Pig(2, "猪妈妈", 28, "F", true));pigs.add(new Pig(3, "乔治", 2, "M", false));pigs.add(new Pig(4, "佩奇", 5, "F", false));

按照id升序

pigs.sort(comparing(Pig::getId));

按照id降序

pigs.sort(comparing(Pig::getId).reversed());

二、多字段排序

根据性别gender升序,再以年龄age升序

pigs.sort(comparing(Pig::getGender).thenComparing(Pig::getAge));

根据性别gender升序,再以年龄age降序

注意:下面的reversed()在thenComparing()里面

pigs.sort(comparing(Pig::getGender).thenComparing(comparing(Pig::getAge).reversed()));

根据性别gender降序,再以年龄age升序

pigs.sort(comparing(Pig::getGender).reversed().thenComparing(Pig::getAge));

根据性别gender降序,再以年龄age降序

注意:下面的reversed()在thenComparing()外面

pigs.sort(comparing(Pig::getGender).thenComparing(Pig::getAge).reversed());

三、Null值参与排序

如果集合中某个数据的某个字段值是null,那就得特殊处理,否则报异常。

再添加一行数据,其中age=null

pigs.add(new Pig(5, "米可", null, "F", false));

null值排在前面

pigs.sort(comparing(Pig::getAge, Comparator.nullsFirst(Integer::compareTo)));

null值排在后面

pigs.sort(comparing(Pig::getAge, Comparator.nullsLast(Integer::compareTo)));

四、同时Null值排序和多字段排序

学了上面的知识,考一考如何同时处理Null值排序和多字段排序?

那就是下面这么写

pigs.sort(comparing(Pig::getGender).thenComparing(Pig::getAge, Comparator.nullsFirst(Integer::compareTo)));

五、List<Map<String, Object>> 排序

List<Map<String, Object>> cats = new ArrayList<>();Map<String,Object> cat1 = new HashMap<>();cat1.put("name", "cat1");cat1.put("age", 10);cats.add(cat1);Map<String,Object> cat2 = new HashMap<>();cat2.put("name", "cat2");cat2.put("age", 2);cats.add(cat2);List<Map<String, Object>> sortedCats = cats.stream().sorted((map1, map2) -> {int age1 = (int) map1.getOrDefault("age", 0);int age2 = (int) map2.getOrDefault("age", 0);return age1 - age2;}).collect(Collectors.toList());sortedCats.forEach(System.out::println);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。