জাভা 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))
)
);
তবে এটি পদ্ধতির উল্লেখগুলির জন্য বৈধ সিনট্যাক্স হিসাবে সংকলন / উপস্থিত হয় না।