プロパティによって区別される Java ストリーム

Java 8 ストリームには、異なるオブジェクトのリストをフィルター処理するために使用できる distinctive() メソッドがありますが、そのメソッドの区別は 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