Bekerja di Java 8, saya memiliki TreeSet
definisi seperti ini:
private TreeSet<PositionReport> positionReports =
new TreeSet<>(Comparator.comparingLong(PositionReport::getTimestamp));
PositionReport
adalah kelas yang agak sederhana yang didefinisikan seperti ini:
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;
}
}
Ini bekerja dengan baik.
Sekarang saya ingin menghapus entri dari TreeSet positionReports
mana timestamp
yang lebih tua dari beberapa nilai. Tetapi saya tidak dapat menemukan sintaks Java 8 yang benar untuk mengungkapkan ini.
Upaya ini sebenarnya mengkompilasi, tetapi memberi saya yang baru TreeSet
dengan pembanding yang tidak ditentukan:
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(Collectors.toCollection(TreeSet::new))
Bagaimana cara saya mengungkapkan, bahwa saya ingin mengumpulkan menjadi TreeSet
dengan pembanding seperti Comparator.comparingLong(PositionReport::getTimestamp)
?
Saya akan memikirkan sesuatu seperti
positionReports = positionReports
.stream()
.filter(p -> p.timestamp >= oldestKept)
.collect(
Collectors.toCollection(
TreeSet::TreeSet(Comparator.comparingLong(PositionReport::getTimestamp))
)
);
Tetapi ini tidak mengkompilasi / tampaknya sintaks yang valid untuk referensi metode.