【JAVA系列】JAVA与C#中List分组、排序方法

C# 中List分组、排序、动态分组

定义实体类

language 复制代码
public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Grade { get; set; }
} 

按单个属性分组

language 复制代码
class Program
{
    static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "Alice", Age = 25, Grade = "A" },
            new Student { Name = "Bob", Age = 22, Grade = "B" },
            new Student { Name = "Charlie", Age = 24, Grade = "A" },
            new Student { Name = "David", Age = 23, Grade = "B" }
        };
     //1、语言集成查询 (LINQ)  group 分组
     var groupedByGrade =
              from student in students
              group student by student.Grade into newGroup
              //orderby newGroup.Key
              select newGroup;

        foreach (var group in groupedByGrade)
        {
            Console.WriteLine($"Grade: {group.Key}");
            foreach (var student in group)
            {
                Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
            }
        }
    }
}
使用方法语法的等效代码分组
language 复制代码
v ar groupByYearQuery = students
    .GroupBy(student => student.Grade)
    //.OrderBy(newGroup => newGroup.Key);

foreach (var yearGroup in groupByYearQuery)
{
    Console.WriteLine($"Key: {yearGroup.Key}");
    foreach (var student in yearGroup)
    {
        Console.WriteLine($"\t{student.LastName}, {student.FirstName}");
    }
}
排序
 记住这么用就对了
 OrderBy:students.OrderBy(s => s.Age).ToList(); // 升序
 OrderByDescending: students.OrderByDescending(s => s.Age).ToList();//倒序
分组

这是个扩展方法,因为使用this。keySelector 就是个函数 ,表示用哪个键分组、并返回一个TKey类型的结果。 GroupedEnumerable 类来进行实际的分组操作返回一个实现了 IEnumerable<IGrouping<TKey, TSource>> 接口的结果集合。

language 复制代码
public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    return new GroupedEnumerable<TSource, TKey, TSource>(source, keySelector, IdentityFunction<TSource>.Instance, null);
}
官网链接

其中也有要多个属性分组的示例,也就是嵌套分组吧
对数据分组 (C#)

JAVA 中的List分组、排序及动态分组排序

分组

language 复制代码
class Main {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
            new Student("Alice", 25, "A"),
            new Student("Bob", 22, "B"),
            new Student("Charlie", 24, "A"),
            new Student("David", 23, "B")
        );

        Map<String, List<Student>> groupedByGrade = students.stream()
            .collect(Collectors.groupingBy(Student::getGrade));

        groupedByGrade.forEach((grade, list) -> {
            System.out.println("Grade: " + grade);
            list.forEach(s -> System.out.println("Name: " + s.getName() + ", Age: " + s.getAge()));
        });
    }
}

升序和倒序

原理就慢慢再懂吧。记住用就行

language 复制代码
List<Student> sortedStudent = students.stream()
    .sorted(Comparator.comparing(Student::getAge))
    .collect(Collectors.toList()); //升序

List<Student> sortedStudent = students.stream()
    .sorted(Comparator.comparing(Student::getAge).reversed())
    .collect(Collectors.toList()); //倒序

简简单单的记录一下自己在.net转java过程中遇到的一些知识点,不是很深
写的有不对或者理解不深刻的地方,请各位老师多多的提,非常感谢!
老师们,同伟太想进步了!!!

相关推荐
2202_754421544 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
蓝染-惣右介7 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
小林想被监督学习7 分钟前
idea怎么打开两个窗口,运行两个项目
java·ide·intellij-idea
HoneyMoose9 分钟前
IDEA 2024.3 版本更新主要功能介绍
java·ide·intellij-idea
我只会发热11 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
是老余12 分钟前
本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
java·maven·intellij-idea·jar
crazy_wsp13 分钟前
IDEA怎么定位java类所用maven依赖版本及引用位置
java·maven·intellij-idea
.Ayang15 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型
一直学习永不止步21 分钟前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
hummhumm35 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j