博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Stream排序分组
阅读量:4182 次
发布时间:2019-05-26

本文共 6949 字,大约阅读时间需要 23 分钟。

一、 基础类型排序

package com.xiaobu.sort;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.stream.Collectors;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2019/6/24 22:17 * @description V1.0   sorted(Comparator.reverseOrder()) 逆序 默认是正序 */public class SortDemo1 {
public static void main(String[] args) {
sortAsc(); sortDesc(); } /** * @author xiaobu * @date 2019/6/24 22:31 * @return void * @descprition 正序排列 * @version 1.0 */ public static void sortAsc(){
List
list = new ArrayList<>(); list.add(50); list.add(45); list.add(25); list.add(98); list.add(32); List
collect = list.stream().sorted().collect(Collectors.toList()); System.out.println("list
元素正序:" + collect); } /** * @author xiaobu * @date 2019/6/24 22:31 * @return void * @descprition 逆序排列 * @version 1.0 */ public static void sortDesc(){
List
list = new ArrayList<>(); list.add(50); list.add(45); list.add(25); list.add(98); list.add(32); List
collect = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()); System.out.println("list
元素逆序:" + collect); }}

二、根据某个属性排序

package com.xiaobu.sort;import lombok.Data;import java.math.BigDecimal;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2019/6/24 22:03 * @description V1.0 */@Datapublic class Person {
private String name; private BigDecimal salary; public Person(){
} public Person(String name,BigDecimal salary){
this. name = name; this.salary =salary; }}
package com.xiaobu.sort;import java.math.BigDecimal;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.stream.Collectors;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2019/6/24 22:02 * @description V1.0  Comparator.comparing()根据属性排序 */public class SortDemo {
public static void main(String[] args) {
Person p1 = new Person("张三", new BigDecimal("50.0")); Person p2 = new Person("王五", new BigDecimal("25.0")); Person p3 = new Person("李四", new BigDecimal("68.0")); Person p4 = new Person("李四", new BigDecimal("17.0")); Person p5 = new Person("张三", new BigDecimal("45.0")); List
list = new ArrayList<>(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); list.add(p5); sortAsc(list); sortDesc(list); } /** * @author xiaobu * @date 2019/6/24 22:46 * @param list List
* @return void * @descprition * @version 1.0 */ public static void sortAsc(List
list){
List
collect = list.stream().sorted(Comparator.comparing(Person::getSalary).reversed()).collect(Collectors.toList()); System.out.println("元素的属性值倒序:"+collect); } /** * @author xiaobu * @date 2019/6/24 22:46 * @param list List
* @return void * @descprition * @version 1.0 */ public static void sortDesc(List
list){ List
collect=list.stream().sorted(Comparator.comparing(Person::getSalary)).collect(Collectors.toList()); System.out.println("元素的属性值倒序:"+collect); }}

三、分组排序

package com.xiaobu.demo;import lombok.Data;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2021/6/23 21:25 * @description */@Datapublic class Person {
private String name; private Integer age;}
package com.xiaobu.demo;import java.util.*;import java.util.stream.Collectors;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2021/6/22 20:53 * @description */public class Demo1 {
public static void main(String[] args) {
testInteger(); testString(); test2(); groupByTest(); } public static void testInteger() {
List
> list = new ArrayList<>(); Map
map1 = new HashMap<>(16); map1.put("id", 1); map1.put("age", 1); Map
map2 = new HashMap<>(16); map2.put("id", 1); map2.put("age", 1); Map
map3 = new HashMap<>(16); map3.put("id", 2); map3.put("age", 1); list.add(map1); list.add(map2); list.add(map3); LinkedHashMap
>> integerMap = list.stream() .sorted(Comparator.comparingInt(map -> (Integer) map.get("id"))) .collect(Collectors.groupingBy(map -> (Integer) map.get("id"), LinkedHashMap::new, Collectors.toList())); //正常输出 System.out.println("integerMap = " + integerMap); } public static void testString() { List
> list = new ArrayList<>(); Map
map1 = new HashMap<>(16); map1.put("id", "1"); map1.put("age", "1"); Map
map2 = new HashMap<>(16); map2.put("id", "1"); map2.put("age", "1"); Map
map3 = new HashMap<>(16); map3.put("id", "2"); map3.put("age", "1"); list.add(map1); list.add(map2); list.add(map3); LinkedHashMap
>> stringMap = list.stream() .sorted(Comparator.comparing(map -> map.get("id"))) .collect(Collectors.groupingBy(map -> map.get("id"), LinkedHashMap::new, Collectors.toList())); //正常输出 System.out.println("stringMap = " + stringMap); } public static void test2() { List
> dataList = new ArrayList<>(); Map
map1 = new HashMap<>(16); map1.put("id", "1"); map1.put("name", "1"); Map
map2 = new HashMap<>(16); map2.put("id", "1"); map2.put("name", "2"); Map
map3 = new HashMap<>(16); map3.put("id", "2"); map3.put("name", "3"); dataList.add(map1); dataList.add(map2); dataList.add(map3); Map
>> listLinkedHashMap = new LinkedHashMap<>(); Map
>> temp = dataList.stream().collect(Collectors.groupingBy(map -> (String) map.get("id"))); temp.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEachOrdered(e -> listLinkedHashMap.put(e.getKey(), e.getValue())); System.out.println("listLinkedHashMap = " + listLinkedHashMap); //comparingInt和comparing 会报错 要明确的指定类型 Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer LinkedHashMap
>> ageMap = dataList.stream() .sorted(Comparator.comparingInt(map -> (Integer) map.get("id"))) .collect(Collectors.groupingBy(map -> (Integer) map.get("id"), LinkedHashMap::new, Collectors.toList())); System.out.println("ageMap = " + ageMap); } /** * 分组 */ private static void groupByTest() { List
persons = new ArrayList<>(); for (int i = 1; i <= 40; i++) { Random r = new Random(); Person person = new Person(); person.setName("abel-" + i); person.setAge(25 + r.nextInt(50)); persons.add(person); } //将list 排序,并按照排序后的结果进行有序分组 不会报错 LinkedHashMap
> ageMap = persons.stream().sorted(Comparator.comparingInt(Person::getAge)).collect(Collectors.groupingBy(Person::getAge, LinkedHashMap::new, Collectors.toList())); System.out.println("ageMap = " + ageMap); }}

转载地址:http://qkgai.baihongyu.com/

你可能感兴趣的文章
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
进程创建时文件系统处理
查看>>
内核线程创建
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
商务智能-基本方法-数据钻取
查看>>
C++程序员技术需求规划(发展方向)
查看>>
JNI
查看>>
Cardboard虚拟现实开发初步(二)
查看>>
60个优秀的免费3D模型下载网站
查看>>
Cardboard虚拟现实开发初步(三)
查看>>
Android native和h5混合开发几种常见的hybrid通信方式
查看>>
Vista/Win7 UAC兼容程序开发指南
查看>>