जावा 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
कुछ मूल्य से अधिक पुराना है। लेकिन मैं इसे व्यक्त करने के लिए सही जावा 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))
)
);
लेकिन यह विधि संदर्भों के लिए मान्य वाक्यविन्यास संकलन / प्रकट नहीं करता है।