java - 如何在 java 8 中使用 IntStream 返回一个升序数组列表?
问题描述
我对 IntStream 很陌生,现在假设我有一个 Arraylist 保留了一些实体:
public ArrayList<Entity> entities(){return entities;}
ArrayList<Entity> entities=new ArrayList<>();
然后我创建了一个包含 x、y 和半径作为字段的子类 rock:
record Rock(int x,int y,int radius) implements Entity{
//Some method
}
现在我想返回半径从大到小排序的岩石:
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();
}
例如,如果我有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()));
Comparator.comparing(Rock::getRadius).reversed()
如果您想要相反的顺序,请使用。你不需要一个IntStream
.
推荐阅读
- c++ - Xcode:预期的不合格 ID
- c++ - 如何获得 Sigma NcR mod 1000000007
- admob - 更改 AdMob 基准国家/地区
- r - 理解为什么 sapply 在 R 中返回更长长度的向量
- sql - 使用动态 SQL 在一个参数中执行多列通配符搜索
- python-3.x - ec2client.describe_instances 在向 IAM 策略添加条件后返回 UnauthorizedOperation
- netsuite - Netsuite itemFulfillment search where status = Pick
- flutter - 如何用颤振罗盘找方向?
- android - 从 textView 获取 int
- haskell - 如何从每个可能的字符中生成字符串?