使用流通过自定义比较器收集到 TreeSet 中
2022-08-31 09:44:37
在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;
}
}
这工作正常。
现在我想从 where 中删除比某个值更旧的条目。但是我无法找出正确的Java 8语法来表达这一点。TreeSet positionReports
timestamp
这个尝试实际上编译了,但给了我一个带有未定义比较器的新比较器: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))
)
);
但这不会编译/似乎是方法引用的有效语法。