【发布时间】:2020-12-03 19:31:40
【问题描述】:
假设我有一个自定义对象列表MaDate,其中的字段temp 类型为int。我想在第一个达到某个阈值MaDate.temp >= 10 后使用流来获取所有项目。
class MaDate {
int temp;
// some other fields
MaDate(int temp){
this.temp = temp;
}
int getTemp(){
return temp;
}
}
和
List<MaDate> myList = new ArrayList<>();
myList.add(new MaDate(3));
myList.add(new MaDate(7));
myList.add(new MaDate(8));
myList.add(new MaDate(4));
myList.add(new MaDate(10));
myList.add(new MaDate(3));
myList.add(new MaDate(9));
理想情况下,结果列表应包含具有temp 值 [10,3,9] 的最后 3 个元素。
我不能使用filter
myList.stream().filter(m -> m.getTemp() >= 10)...
因为这会消除所有价值低于 10 的对象。我也不能使用skip
myList.stream().skip(4)...
因为我事先不知道索引。我不能用
findFirst(m -> m.getTemp() >= 10)
因为一旦达到阈值后我需要所有对象,无论对象在那之后具有哪些值。
我能否以某种方式将上述内容组合起来以获得我想要的内容或编写我自己的方法以放入 skip 或 filter
myList.stream().skip(**as long as treshold not met**)
或
myList.stream().filter(**all elements after first element value above 10**)
?
【问题讨论】:
标签: java filter java-8 java-stream skip