Trabajando en Java 8, tengo una TreeSet
definición como esta:
private TreeSet<PositionReport> positionReports =
new TreeSet<>(Comparator.comparingLong(PositionReport::getTimestamp));
PositionReport
es una clase bastante simple definida así:
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;
}
}
Esto funciona bien.
Ahora quiero eliminar las entradas de TreeSet positionReports
donde timestamp
es más antiguo que algún valor. Pero no puedo encontrar la sintaxis correcta de Java 8 para expresar esto.
Este intento en realidad se compila, pero me da un nuevo TreeSet
con un comparador indefinido:
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(Collectors.toCollection(TreeSet::new))
¿Cómo expreso que quiero recopilar en TreeSet
un comparador como Comparator.comparingLong(PositionReport::getTimestamp)
?
Hubiera pensado algo como
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(
Collectors.toCollection(
TreeSet::TreeSet(Comparator.comparingLong(PositionReport::getTimestamp))
)
);
Pero esto no compila / parece ser una sintaxis válida para referencias a métodos.