List集合根据某一元素排序

本文介绍了一种使用Java和Lambda表达式实现的拼音排序方法。通过Collator类获取中文拼音排序规则,并应用于自定义的ResultVo类集合排序。该方法提高了中文姓名列表的排序效率和准确性。

直接上代码:
运行:

 public static void main(String[] args) {
List<ResultVo> resultVos=new ArrayList<>();

List<String> a=new ArrayList<>();
a.add("范增");
a.add("方唐镜");
a.add("范淑女");
a.add("方文山");
a.add("方崇大");

List<String> b=new ArrayList<>();
b.add("白少也");
b.add("白福关");


resultVos.add(new ResultVo("F",a));
resultVos.add(new ResultVo("B",b));

//用lombda表达式重写compare方法------------------这个才是重点
Comparator comparator = Collator.getInstance(Locale.CHINA);
Collections.sort(resultVos, new Comparator<ResultVo>() {
  @Override
  public int compare(ResultVo o1, ResultVo o2) {
    return comparator.compare(o1.getPinYin(), o2.getPinYin());
  }
});

JSONObject pinYinJson=new JSONObject();
pinYinJson.put("data",resultVos);
System.out.println(pinYinJson.toString());
  }

结果:
在这里插入图片描述

实体类:

封装类:

import java.util.List;

public class ResultVo {
    private String pinYin;
    private List<String> judgeNames;


    public ResultVo() {
    }

    public String getPinYin() {
        return pinYin;
    }

    public void setPinYin(String pinYin) {
        this.pinYin = pinYin;
    }

    public List<String> getJudgeNames() {
        return judgeNames;
    }

    public void setJudgeNames(List<String> judgeNames) {
        this.judgeNames = judgeNames;
    }

    public ResultVo(String pinYin, List<String> judgeNames) {
        this.pinYin = pinYin;
        this.judgeNames = judgeNames;
    }

    @Override
    public String toString() {
        return "ResultVo{" +
                "pinYin='" + pinYin + '\'' +
                ", judgeNames=" + judgeNames +
                '}';
    }

}
### Java List集合使用 Stream API 根据对象字段排序Java中,可以借助Stream API轻松实现基于对象特定字段的排序操作。对于包含多个属性的对象列表来说,这提供了一种简洁而强大的方式来进行数据处理。 #### 定义 `Person` 类 为了展示具体的排序过程,先定义一个简单的 `Person` 类,该类拥有两个基本属性:名字 (`name`) 和年龄 (`age`)。 ```java public class Person { private String name; private int age; // 构造器、getter和setter省略 } ``` #### 创建并填充 `List<Person>` 列表 接下来创建一些 `Person` 实例并将它们加入到 `ArrayList<Person>` 中作为待排序的数据源[^1]。 ```java import java.util.ArrayList; import java.util.List; // 初始化人员名单... List<Person> people = new ArrayList<>(); people.add(new Person("Alice", 30)); people.add(new Person("Bob", 25)); people.add(new Person("Charlie", 35)); ``` #### 单字段排序——按姓名字母顺序排列 要按照单个字段(比如这里的名字)进行自然排序,则可以直接调用 `stream()` 方法转换成流形式,并应用内置的 `sorted()` 函数配合自定义比较器: ```java import java.util.Comparator; // 按照 'name' 字段升序排序 List<Person> sortedByName = people.stream() .sorted(Comparator.comparing(Person::getName)) .collect(Collectors.toList()); ``` 此代码片段实现了对 `people` 列表内所有元依据其名称首字母从小到大重新安排位置的功能[^3]。 #### 多字段排序——先按年龄再按姓名 当需要考虑更多维度时,还可以链式调用 `thenComparing()` 来依次指定额外的排序条件。下面的例子展示了如何优先根据年龄降序排列,如果两人同龄则进一步依照姓氏字典序决定先后次序: ```java // 先按 'age' 降序,相同情况下按 'name' 升序 List<Person> complexSortedPeople = people.stream() .sorted( Comparator.comparingInt(Person::getAge).reversed() .thenComparing(Person::getName) ) .collect(Collectors.toList()); ``` 上述例子不仅说明了如何利用Stream API执行复杂排序逻辑,同时也体现了Java语言内部提供的灵活组合机制[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值