首页 > 编程语言 >java8实现分组、排序

java8实现分组、排序

时间:2023-12-22 11:47:05浏览次数:43  
标签:userName age userList score 分组 UserTest new 排序 java8

1、用户对象

@Getter
@Setter
@AllArgsConstructor
public class UserTest {
    // 名称
    private String userName;
    // 年龄
    private string age;
   // 分数(这个无所谓啊)
    private double score;

}

2、准备数据

List<UserTest> userList = new ArrayList<>();
userList.add(new UserTest("user", "1",3.55));
userList.add(new UserTest("user1", "3",4.66));
userList.add(new UserTest("user2", "2",90.66));
userList.add(new UserTest("user3", "2",7.999));

3、根据年龄分组

 Map<Integer, List<UserTest>> groupData = userList.stream()
                .collect(Collectors.groupingBy(UserTest::getAge));

结果:

{
	"1": [{
		"age": "1",
		"score": 3.55,
		"userName": "user"
	}],
	"2": [{
		"age": "2",
		"score": 90.66,
		"userName": "user2"
	}, {
		"age": "2",
		"score": 7.999,
		"userName": "user3"
	}],
	"3": [{
		"age": "3",
		"score": 4.66,
		"userName": "user1"
	}]
}

4、根据年龄分组、拼按年龄倒序

Map<String, List<UserTest>> groupData = userList.stream()
                .collect(
                        // 根据年龄分组
                        Collectors.groupingBy(UserTest::getAge,
                                // 年龄倒序(key)
                                () -> new TreeMap<>((k1, k2)->  - k1.compareTo(k2)),
                                Collectors.toList())

                );



        System.out.println(JSON.toJSONString(groupData));

结果

{
	"3": [{
		"age": "3",
		"score": 4.66,
		"userName": "user1"
	}],
	"2": [{
		"age": "2",
		"score": 90.66,
		"userName": "user2"
	}, {
		"age": "2",
		"score": 7.999,
		"userName": "user3"
	}],
	"1": [{
		"age": "1",
		"score": 3.55,
		"userName": "user"
	}]
}

5、根据年龄分组、拼按年龄倒序、value按分数倒序

Map<String, List<UserTest>> groupData = userList.stream()
                .collect(
                   // 根据年龄分组
                   Collectors.groupingBy(UserTest::getAge,
                        // 年龄倒序(key)
                        () -> new TreeMap<>((k1, k2) -> -(k1.compareTo(k2))),
                            // 分数倒序(value)
                            Collectors.collectingAndThen(
                                    Collectors.toCollection(
                                            ()-> new TreeSet<>(Comparator.comparing(UserTest::getScore,Comparator.reverseOrder())))
                                            ,ArrayList::new
                            )
                        ));
        System.out.println(JSON.toJSONString(groupData));

结果:

{
	"3": [{
		"age": "3",
		"score": 4.66,
		"userName": "user1"
	}],
	"2": [{
		"age": "2",
		"score": 90.66,
		"userName": "user2"
	}, {
		"age": "2",
		"score": 7.999,
		"userName": "user3"
	}],
	"1": [{
		"age": "1",
		"score": 3.55,
		"userName": "user"
	}]
}

标签:userName,age,userList,score,分组,UserTest,new,排序,java8
From: https://www.cnblogs.com/lcy2020/p/17921270.html

相关文章

  • Java8函数式编程应用
    我们经常提到,Java8是革命性的一个版本,原因就是正式引入了函数式编程,那Java的函数式编程在实际应用中到底有什么用呢?结合实际的应用,我整理出了函数式在Java的几个经典用途。  缓求值惰性求值(Lazy evaluation)是在需要时才进行求值的计算方式。惰性求值自然地在数据结构中包......
  • SpringMVC处理Java8新日期类参数
    SpringMVC如何将request参数自动封装为LocalDate和LocalDateTime在使用SpringMVC时,java.util.Date类型字段可以使用@DateTimeFormat注解将application/x-www-from-urlencoded类型的请求中的字符串进行自动转换。而Java8中新的时间类型该如何支持呢?在application/x-www-from-u......
  • pythoy排序不支持原生比较的对象
    问题你想排序类型相同的对象,但是他们不支持原生的比较操作。解决方案内置的sorted()函数有一个关键字参数key,可以传入一个callable对象给它,这个callable对象对每个传入的对象返回一个值,这个值会被sorted用来排序这些对象。比如,如果你在应用程序里面有一个User实例......
  • Excel-做抽奖、报告分组
    还在为了公司抽奖、报告分组做籤筒吗?来试试看Excel的随机函数吧Randbetween(最小值,最大值):从最小值和最大值的范围内产生一个整数Choose(序号,可供选择的选项):根据序号选择对应选项Rand():产生0到1的随机数Roundup(数值,位数):无条件进位函数例子:=INDEX(C3:C14,RANDBETWEEN(......
  • 【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)
    [NOIP2007普及组]奖学金题目描述某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前名学生发奖学金。期末,每个学生都有门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规......
  • 排序
    排序快排,归并排序之前已经熟悉不再赘述计数排序复杂度O(n+m)计数排序适于值域范围较小的数字排序,核心思想:每个数字出现几次统计完每个元素出现次数后,求一边前缀和,就知道了每个数字排完序后的序列中出席拿的为止的范围(第几小到第几小都是这个数字)把数字填入相应为止保......
  • java Page 实现根据字段名排序
    /***排序JSON格式*/@ApiModelProperty(value="排序JSON格式")privateStringorderBy;  @GetMapping("/page_manage")@ApiModelProperty(value="管理端用户管理分页",notes="管理端用户管理分页")publicRpageManage(Page<SysUser>page,......
  • 排序算法详解 C# 版
    概述一般使用的八大排序算法是:插入排序、选择排序、冒泡排序、希尔排序、归并排序、快速排序、堆排序、基数排序,每个方法有其适合的使用场景,可以根据具体数据进行选择.冒泡排序//冒泡排序,比较相临两个数的大小,如lst[i]>lst[i+1],则互换位置staticint[]Bu......
  • 6-4 快速排序
    本题要求实现快速排序的一趟划分函数,待排序列的长度1<=n<=1000。函数接口定义: intPartition(SqListL,intlow,inthigh);其中L是待排序表,使排序后的数据从小到大排列。###类型定义: typedefintKeyType;typedefstruct{KeyType......
  • class074 背包dp-分组背包、完全背包【算法】
    class074背包dp-分组背包、完全背包【算法】算法讲解074【必备】背包dp-分组背包、完全背包code1P1757通天之分组背包//分组背包(模版)//给定一个正数m表示背包的容量,有n个货物可供挑选//每个货物有自己的体积(容量消耗)、价值(获得收益)、组号(分组)//同一个组的物品只......