通过比较ZonedDateTime类型的内部字段,使用lambdas对bean进行排序

时间:2015-11-04 10:14:00

标签: java spring sorting lambda

我有多个Beans,它们具有以下结构

@Entity
public class AttributeA implements AttributeInterface{
.....
public ZonedDateTime dateEnabled;
....
}

@Entity
public class AttributeB implements AttributeInterface {
.....
public ZonedDateTime dateEnabled;
....
}

@Entity
public class AttributeC implements AttributeInterface {
.....
public ZonedDateTime dateEnabled;
....
}

我有一个接口AttributeInterface,它基本上是所有属性的标记。 该接口实现了几个功能(多于一个)。我需要做的是当我有一组AttributesInterfaces,即

Collection<AttributeInterface> collectionObject;  

我需要按字段排序该集合&#34; dateEnabled&#34;这是属性的一部分,然后需要选择最新的属性,即最后创建的属性,并对其执行操作,例如attribute.disable()。

我是lambdas的新手,但我想使用lambdas因为它们提供的并行性。但是,我无法确定构造应该是什么,即最有效的方法是什么。我的意思是shell我在AttributeInterface下添加一些新方法,例如compareToAnotherAttributeByZonedDateTime(),并在所有Attribute / A / B / C bean中实现该方法,然后调用此处提供的解决方案:

Sort a Java collection object based on one field in it

 Collections.sort(collectionObject , new Comparator<ZonedDateTime>()
            (AttributeInterface o1, AttributeInterface o2) ->
                         { 
                             return  (o1.getCustomerCount().compareToAnotherInterfaceByZonedDateTime() - o2.getCustomerCount().compareToAnotherInterfaceByZonedDateTime() );
                         } 
                     );

或者是否有任何有效的方法,即某些java 8内置函数[SAM-单个抽象方法或(功能接口)]可以对ZonedDateTime类型进行那种比较?我的意思是来自 java.utils.functions

真的很感激。

1 个答案:

答案 0 :(得分:1)

发现它适用于java 8

Collections.sort((List<AttributeInterface>) collectionObject, (obj1, obj2) -> 
                               obj1.getDateEnabled().compareTo(obj2.getDateEnabled() )    );