【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过程中遇到的一些知识点,不是很深
写的有不对或者理解不深刻的地方,请各位老师多多的提,非常感谢!
老师们,同伟太想进步了!!!

相关推荐
MY_TEUCK1 小时前
Sealos 平台部署实战指南:结合 Cursor 与版本发布流程
java·人工智能·学习·aigc
我爱cope1 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
rockey6271 小时前
AScript函数体系详解
c#·.net·script·eval·expression·function·动态脚本
朝新_2 小时前
【Spring AI 】图像与语音模型实战
java·人工智能·spring
RH2312112 小时前
2026.4.16Linux 管道
java·linux·服务器
zmsofts3 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透
java·面试·mybatis
aq55356004 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
我是无敌小恐龙5 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习
心态与习惯5 小时前
Julia 初探,及与 C++,Java,Python 的比较
java·c++·python·julia·比较
一叶飘零_sweeeet6 小时前
优秀文章合集
java