1、list<基本類型>
基礎(chǔ)數(shù)據(jù)
List<Integer> list = Arrays.asList(1, 5, 6, 2, 4, 80, 43, 7);
1.1 Collections.sort排序
Collections.sort(list);
System.out.println("Collections.sort正序----->"+list);
Collections.reverse(list);
System.out.println("Collections.reverse倒序-->"+list);
結(jié)果:
Collections.sort正序----->[1, 2, 4, 5, 6, 7, 43, 80]
Collections.reverse倒序-->[80, 43, 7, 6, 5, 4, 2, 1]
1.2 list.sort排序
list.sort(Integer::compareTo);
System.out.println("list.sort正序-->"+list);
list.sort(Comparator.reverseOrder());
System.out.println("list.sort倒序-->"+list);
結(jié)果:
list.sort正序-->[1, 2, 4, 5, 6, 7, 43, 80]
list.sort倒序-->[80, 43, 7, 6, 5, 4, 2, 1]
1.3 list.stream()排序
List<Integer> collect = list.stream().sorted().collect(Collectors.toList());
System.out.println("stream.sorted正序-->" + collect);
List<Integer> collect1 = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
System.out.println("stream.sorted倒序-->" + collect1);
結(jié)果:
stream.sorted正序-->[1, 2, 4, 5, 6, 7, 43, 80]
stream.sorted倒序-->[80, 43, 7, 6, 5, 4, 2, 1]
2、list<對象>
-
List<類> list = new ArrayList<>();
基礎(chǔ)數(shù)據(jù)
List<PersonDto> personDtos = ListUtil.toList(
new PersonDto(1, "張三", 174, 32),
? ? ? ? new PersonDto(4, "李四", 173, 23),
? ? ? ? new PersonDto(4, "趙六", 185, 20),
? ? ? ? new PersonDto(3, "王五", 192, 20),
? ? ? ? new PersonDto(5, "孫七", 169, 26)
);
2.1 單屬性排序(升序)
-
list.stream().sorted(Comparator.comparing(類::屬性一));
System.out.println("1.默認排序");
personDtos.forEach(System.out::println);
System.out.println("2.按年齡升序");
personDtos.stream().sorted(Comparator.comparing(PersonDto::getAge)).forEach(System.out::println);
結(jié)果:
1.默認排序
PersonDto{id=1, name='張三', tall=174, age=32}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=5, name='孫七', tall=169, age=26}
2.按年齡升序
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=5, name='孫七', tall=169, age=26}
PersonDto{id=1, name='張三', tall=174, age=32}
2.2 單屬性排序(降序)
-
list.stream().sorted(Comparator.comparing(類::屬性一).reversed()); //先以屬性一升序,而后對結(jié)果集進行屬性一降序
-
list.stream().sorted(Comparator.comparing(類::屬性一, Comparator.reverseOrder())); //以屬性一降序
System.out.println("3.1 按年齡倒序 (先以年齡升序,而后對結(jié)果集進行年齡降序)");
personDtos.stream().sorted(Comparator.comparing(PersonDto::getAge).reversed()).forEach(System.out::println);
System.out.println("3.2 按年齡倒序 (先以年齡升降序)");
personDtos.stream().sorted(Comparator.comparing(PersonDto::getAge,Comparator.reverseOrder())).forEach(System.out::println);
結(jié)果:
3.1 按年齡倒序 (先以年齡升序,而后對結(jié)果集進行年齡降序)
PersonDto{id=1, name='張三', tall=174, age=32}
PersonDto{id=5, name='孫七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
3.2 按年齡倒序 (先以年齡升降序)
PersonDto{id=1, name='張三', tall=174, age=32}
PersonDto{id=5, name='孫七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
2.3 多屬性排序(屬性一升序,屬性二升序)
-
list.stream().sorted(Comparator.comparing(類::屬性一).thenComparing(類::屬性二));//以類屬性一升序 屬性二升序
System.out.println("4.按學(xué)號升序、年齡升序");
personDtos
.stream()
.sorted(Comparator.comparingInt(PersonDto::getId)
.thenComparingInt(PersonDto::getAge))
.collect(Collectors.toList())
.forEach(System.out::println);
結(jié)果:
4.按學(xué)號升序、年齡升序
PersonDto{id=1, name='張三', tall=174, age=32}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=5, name='孫七', tall=169, age=26}
2.4 多屬性排序(屬性一降序,屬性二降序)
-
list.stream().sorted(Comparator.comparing(類::屬性一).reversed().thenComparing(類::屬性二,Comparator.reverseOrder()));//先以屬性一升序,升序結(jié)果進行屬性一降序,再進行屬性二降序
-
list.stream().sorted(Comparator.comparing(類::屬性一).thenComparing(類::屬性二).reversed());//先以屬性一升序,進行屬性二升序,再進行結(jié)果降序
-
list.stream().sorted(Comparator.comparing(類::屬性一,Comparator.reverseOrder()).thenComparing(類::屬性二,Comparator.reverseOrder()));//先以屬性一降序,再進行屬性二降序
System.out.println("5.1.按學(xué)號降序、年齡降序 (先以年齡升序,升序結(jié)果進行學(xué)號降序,再進行年齡降序)");
personDtos
.stream()
.sorted(Comparator.comparing(PersonDto::getId)
.reversed()
.thenComparing(PersonDto::getAge,Comparator.reverseOrder()))
.collect(Collectors.toList())
.forEach(System.out::println);
System.out.println("5.2.按學(xué)號降序、年齡降序 (先以年齡升序,再進行年齡升序,結(jié)果進行(學(xué)號&年齡)降序)");
personDtos
.stream()
.sorted(Comparator.comparingInt(PersonDto::getId)
.thenComparingInt(PersonDto::getAge)
.reversed())
.collect(Collectors.toList())
.forEach(System.out::println);
System.out.println("5.3.按學(xué)號降序、年齡降序 (先以學(xué)號降序,再進行年齡降序)");
personDtos
.stream()
.sorted(Comparator.comparing(PersonDto::getId,Comparator.reverseOrder())
.thenComparing(PersonDto::getAge,Comparator.reverseOrder()))
.collect(Collectors.toList())
.forEach(System.out::println);
結(jié)果:
5.1.按學(xué)號降序、年齡降序 (先以年齡升序,升序結(jié)果進行學(xué)號降序,再進行年齡降序)
PersonDto{id=5, name='孫七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='張三', tall=174, age=32}
5.2.按學(xué)號降序、年齡降序 (先以年齡升序,再進行年齡升序,結(jié)果進行(學(xué)號&年齡)降序)
PersonDto{id=5, name='孫七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='張三', tall=174, age=32}
5.3.按學(xué)號降序、年齡降序 (先以學(xué)號降序,再進行年齡降序)
PersonDto{id=5, name='孫七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='張三', tall=174, age=32}
2.5 多屬性排序(屬性一升序,屬性二降序)
-
list.stream().sorted(Comparator.comparing(類::屬性一).reversed().thenComparing(類::屬性二).reversed());//先以屬性一升序,升序結(jié)果進行屬性一降序,再進行屬性二升序,結(jié)果進行屬性一降序?qū)傩远敌?/strong>
-
list.stream().sorted(Comparator.comparing(類::屬性一).thenComparing(類::屬性二,Comparator.reverseOrder()));//先以屬性一升序,再進行屬性二降序
System.out.println("6.1 按學(xué)號升序、年齡降序 (先以學(xué)號升序,升序結(jié)果進行學(xué)號降序,再進行年齡升序,結(jié)果進行(學(xué)號&年齡)降序)");
personDtos
.stream()
.sorted(Comparator.comparing(PersonDto::getId).reversed()
.thenComparing(PersonDto::getAge).reversed())
.collect(Collectors.toList())
.forEach(System.out::println);
System.out.println("6.2 按學(xué)號升序、年齡降序 (先以學(xué)號升序,再進行年齡降序)");
personDtos
.stream()
.sorted(Comparator.comparing(PersonDto::getId)
.thenComparing(PersonDto::getAge,Comparator.reverseOrder()))
.collect(Collectors.toList())
.forEach(System.out::println);
結(jié)果:
6.1 按學(xué)號升序、年齡降序 (先以學(xué)號升序,升序結(jié)果進行學(xué)號降序,再進行年齡升序,結(jié)果進行(學(xué)號&年齡)降序)
PersonDto{id=1, name='張三', tall=174, age=32}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=5, name='孫七', tall=169, age=26}
6.2 按學(xué)號升序、年齡降序 (先以學(xué)號升序,再進行年齡降序)
PersonDto{id=1, name='張三', tall=174, age=32}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=5, name='孫七', tall=169, age=26}
2.6 多屬性排序(屬性一降序,屬性二升序)
-
list.stream().sorted(Comparator.comparing(類::屬性一).reversed().thenComparing(類::屬性二));//先以屬性一升序,升序結(jié)果進行屬性一降序,再進行屬性二升序
-
list.stream().sorted(Comparator.comparing(類::屬性一,Comparator.reverseOrder()).thenComparing(類::屬性二));//先以屬性一降序,再進行屬性二升序
System.out.println("7.1 按學(xué)號降序、年齡升序 (先以學(xué)號升序,升序結(jié)果進行學(xué)號降序,再進行年齡升序)");
personDtos
.stream()
.sorted(Comparator.comparing(PersonDto::getId)
.reversed()
.thenComparing(Comparator.comparing(PersonDto::getAge)))
.collect(Collectors.toList())
.forEach(System.out::println);
System.out.println("7.2 按學(xué)號降序、年齡升序 (以學(xué)號學(xué)號降序,再進行年齡升序)");
personDtos
.stream()
.sorted(Comparator.comparing(PersonDto::getId,Comparator.reverseOrder())
.thenComparing(Comparator.comparing(PersonDto::getAge))
.thenComparing(Comparator.comparing(PersonDto::getTall)))
.collect(Collectors.toList())
.forEach(System.out::println);
結(jié)果:
7.1 按學(xué)號降序、年齡升序 (先以學(xué)號升序,升序結(jié)果進行學(xué)號降序,再進行年齡升序)
PersonDto{id=5, name='孫七', tall=169, age=26}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='張三', tall=174, age=32}
7.2 按學(xué)號降序、年齡升序 (以學(xué)號學(xué)號降序,再進行年齡升序)
PersonDto{id=5, name='孫七', tall=169, age=26}
PersonDto{id=4, name='趙六', tall=185, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='張三', tall=174, age=32}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-603315.html
3、重點關(guān)注(倒序的兩種寫法)
?。?!兩種排序完全不同:1是獲得排序結(jié)果后再排序,2是直接進行排序?。?!
1, Comparator.comparing(類::屬性一).reversed();
2, Comparator.comparing(類::屬性一,Comparator.reverseOrder());
?文章來源:http://www.zghlxwxcb.cn/news/detail-603315.html
?
?
到了這里,關(guān)于集合list排序,普通排序,stream(單屬性、多屬性)排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!