Bei der Arbeit in Java 8 habe ich Folgendes TreeSet
definiert:
private TreeSet<PositionReport> positionReports =
new TreeSet<>(Comparator.comparingLong(PositionReport::getTimestamp));
PositionReport
ist eine ziemlich einfache Klasse, die wie folgt definiert ist:
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;
}
}
Das funktioniert gut.
Jetzt möchte ich Einträge aus dem entfernen , TreeSet positionReports
wo timestamp
älter ist als ein Wert. Aber ich kann nicht die richtige Java 8-Syntax herausfinden, um dies auszudrücken.
Dieser Versuch wird tatsächlich kompiliert, gibt mir aber einen neuen TreeSet
mit einem undefinierten Komparator:
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(Collectors.toCollection(TreeSet::new))
Wie drücke ich aus, dass ich TreeSet
mit einem Komparator wie in einem sammeln möchte Comparator.comparingLong(PositionReport::getTimestamp)
?
Ich hätte so etwas gedacht
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(
Collectors.toCollection(
TreeSet::TreeSet(Comparator.comparingLong(PositionReport::getTimestamp))
)
);
Dies kompiliert / scheint jedoch keine gültige Syntax für Methodenreferenzen zu sein.