การทำงานใน 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))
)
);
แต่สิ่งนี้ไม่ได้รวบรวม / ดูเหมือนว่าจะเป็นไวยากรณ์ที่ถูกต้องสำหรับการอ้างอิงวิธีการ