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();
}
参考资料