java实体类集合按某字段排序方法

本文介绍了一种简洁有效的方法,用于对多个实体类的集合按照指定属性(如时间)进行排序,包括升序和降序,并通过具体示例展示了如何使用此方法。

业务场景:
今天有个小需求,多个实体类的集合合并以后,按照实体类的某个属性(时间)进行排序,自己写的方法太蠢且复杂了,所以在网上找了方法,感觉还是比较简洁有效的,现在记录下来以备后用。

   package simpletest;

/**
 * 测试实体类
 * @author YuanReny1
 *
 */
public class User {
	private String name;
	private String birthDay;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getBirthDay() {
		return birthDay;
	}
	public void setBirthDay(String birthDay) {
		this.birthDay = birthDay;
	}
	public User(String name, String birthDay) {
		super();
		this.name = name;
		this.birthDay = birthDay;
	}
	
}
package simpletest;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;

public class ListSortTest {
    
	/**
	 * bean的集合按照指定bean的字段排序
	 * @param list 要排序的集合
	 * @param filedName 字段名称
	 * @param ascFlag 是否升序
	 */
    public static void sort(List list, String filedName, boolean ascFlag) {
        if (list.size() == 0 || filedName.equals("")) {
            return;
        }
        Comparator<?> cmp = ComparableComparator.getInstance();
        if (ascFlag) {
            cmp = ComparatorUtils.nullLowComparator(cmp);
        } else {
            cmp = ComparatorUtils.reversedComparator(cmp);

        }
        Collections.sort(list, new BeanComparator(filedName, cmp));
    }
    
    static void test() {
    	List<User> list = new ArrayList<>();
    	list.add(new User("张三", "2020-02-01 16:00:01"));
        list.add(new User("李四", "2020-02-03 08:40:32"));
        list.add(new User("王五", "2020-02-01 09:33:32"));
        sort(list, "birthDay", false);
        for(User u : list) {
        	System.out.println(u.getName() + "-> " + u.getBirthDay());
        }
    }
    
	public static void main(String[] args) {
		test();
	}
}

预期结果:User的集合按照birthDay降序排序
执行结果:
在这里插入图片描述
OK

要对实体集合获取时间字段最新并去重,你可以使用Java中的Stream API以及Java 8引入的新的日期和时间API来实现。以下是一个示例代码: ```java import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // 示例实体类 class Entity { private LocalDateTime timestamp; public Entity(LocalDateTime timestamp) { this.timestamp = timestamp; } public LocalDateTime getTimestamp() { return timestamp; } } // 示例实体集合 List<Entity> entities = new ArrayList<>(); entities.add(new Entity(LocalDateTime.parse("2022-01-01T10:00:00"))); entities.add(new Entity(LocalDateTime.parse("2022-01-02T09:00:00"))); entities.add(new Entity(LocalDateTime.parse("2022-01-01T12:00:00"))); entities.add(new Entity(LocalDateTime.parse("2022-01-02T11:00:00"))); // 获取最新时间字段并去重 List<Entity> result = entities.stream() .sorted(Comparator.comparing(Entity::getTimestamp).reversed()) .collect(Collectors.toMap(Entity::getTimestamp, entity -> entity, (e1, e2) -> e1)) .values() .stream() .collect(Collectors.toList()); // 输出结果 result.forEach(entity -> System.out.println(entity.getTimestamp())); } } ``` 这段代码首先定义了一个示例的实体类 `Entity`,其中包含一个时间字段 `timestamp`。然后创建了一个示例的实体集合 `entities`。 通过使用Stream API,我们首先对实体集合进行排序,按照时间字段 `timestamp` 的降序排列。然后使用`Collectors.toMap`方法将时间字段作为键,实体对象作为值,注意去重时保留了最新的实体对象。最后通过`values()`方法获取去重后的实体对象集合,并将其收集到一个新的列表中。 运行代码,你将得到一个按照最新时间字段排序并去重后的实体集合
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值