Java 8'de çalışıyorum, şöyle bir TreeSet
tanımım var :
private TreeSet<PositionReport> positionReports =
new TreeSet<>(Comparator.comparingLong(PositionReport::getTimestamp));
PositionReport
şu şekilde tanımlanan oldukça basit bir sınıftır:
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;
}
}
Bu iyi çalışıyor.
Şimdi girdileri bir değerden daha eski olan TreeSet positionReports
yerden kaldırmak istiyorum timestamp
. Ancak bunu ifade etmek için doğru Java 8 sözdizimini bulamıyorum.
Bu girişim aslında derler, ancak bana TreeSet
tanımsız bir karşılaştırıcıyla yeni bir şey verir :
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(Collectors.toCollection(TreeSet::new))
TreeSet
Bir karşılaştırıcı ile toplamak istediğimi nasıl ifade ederim Comparator.comparingLong(PositionReport::getTimestamp)
?
Şöyle bir şey düşünürdüm
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(
Collectors.toCollection(
TreeSet::TreeSet(Comparator.comparingLong(PositionReport::getTimestamp))
)
);
Ancak bu, yöntem referansları için geçerli sözdizimi derlemez / görünmez.