Java 流按屬性區分

Java 8 流有一個 distinct() 方法,可用來篩選出不同的物件列表,但該方法的差異是基於 Object.equals(Object)。如果您想根據物件的任何屬性(字段)過濾物件列表,該怎麼辦? StreamEx 函式庫是一個優雅的解決方案。

import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.util.streamex.StreamEx;

@Data
@EqualsAndHashCode(of={"id"})
public class SomeObject {
    private Long id; // for hashCode and equals
    private Long externalId; // some id from external system, could be duplicated
    //...
    private String otherFields; 
}

//...

public List<SomeObject> getDistinctSomeObjects(List<SomeObject> someObjects) {
    return StreamEx.of(someObjects).distinct(SomeObject::getExternalId).toList();
}

參考文獻

java