我对 IntStream 很新鲜,现在假设我有一个 Arraylist 保留了一些实体:
public ArrayList<Entity> entities(){return entities;}
ArrayList<Entity> entities=new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个具有 x、y 和半径作为字段的子类岩石:
record Rock(int x,int y,int radius) implements Entity{
//Some method
}
Run Code Online (Sandbox Code Playgroud)
现在我想返回半径从大到小排列的岩石:
OptionalInt findRock(ArrayList<Entity> es){
//This one returns the rock in a stored order, but I want get the rock sequence from big radius to small radius
return IntStream.range(0,es.size()).filter(i->es.get(i) instanceof Rock).findFirst();
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我有rock1 which radius == 15, rock2 which radius == 10, rock3 which radius == 20,它将返回rock3 -> rock1 -> rock2
有什么方法可以实现吗?谢谢。
你可以这样做
entities.stream()
.filter(Rock.class::isInstance)
.map(Rock.class::cast)
.sorted(Comparator.comparingInt(Rock::getRadius))
.forEach(rock -> System.out.println("Rock with radius " + rock.getRadius()));
Run Code Online (Sandbox Code Playgroud)
Comparator.comparing(Rock::getRadius).reversed()如果您想要相反的顺序,请使用。你不需要一个IntStream.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |