Java 8에서 작업하면서 TreeSet
다음과 같이 정의했습니다.
private TreeSet<PositionReport> positionReports =
new TreeSet<>(Comparator.comparingLong(PositionReport::getTimestamp));
PositionReport
다음과 같이 정의 된 다소 간단한 클래스입니다.
public static final class PositionReport implements Cloneable {
private final long timestamp;
private final Position position;
public static PositionReport create(long timestamp, Position position) {
return new PositionReport(timestamp, position);
}
private PositionReport(long timestamp, Position position) {
this.timestamp = timestamp;
this.position = position;
}
public long getTimestamp() {
return timestamp;
}
public Position getPosition() {
return position;
}
}
이것은 잘 작동합니다.
지금은에서 항목을 제거 할 TreeSet positionReports
경우 timestamp
어떤 값보다 이전 버전입니다. 그러나 이것을 표현하는 올바른 Java 8 구문을 알아낼 수 없습니다.
이 시도는 실제로 컴파일되지만 TreeSet
정의되지 않은 비교기 로 새로운 것을 제공합니다 .
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(Collectors.toCollection(TreeSet::new))
수집하고 싶은 것을 TreeSet
비교기 로 어떻게 표현 Comparator.comparingLong(PositionReport::getTimestamp)
하나요?
나는 다음과 같은 것을 생각했을 것이다.
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(
Collectors.toCollection(
TreeSet::TreeSet(Comparator.comparingLong(PositionReport::getTimestamp))
)
);
그러나 이것은 컴파일되지 않거나 메소드 참조에 대한 유효한 구문으로 보입니다.