java—如何满足带有布尔条件的 predicate

rdrgkggo  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(393)

我试图遍历一个列表来满足一个布尔条件,然后最后将其附加到一个数组中。我真的不确定是否有其他方法可以做到这一点,但我完全卡住了,找不到任何关于我的问题。下面是代码片段:
所以我想说如果 isCryDamagetrue 对于任何一个 entities 我想附加这个 BlockPosfilteredPositions . 我知道如何在py中做到这一点,但我不知道java中如何处理这个 predicate 业务。目前它的说法是 CrystalUtils.GetPlayerPosFloored(entity)) 必须是 predicate 类型。

List<EntityPlayer> entities = mc.world.playerEntities;
List<BlockPos> sufficientBlocks = CrystalUtils.findCrystalBlocks((int) range.getValDouble());
List<BlockPos> filteredPositions = new ArrayList<>();
for (EntityPlayer entity : entities) {
    sufficientBlocks.stream().filter(isCryDamageSufficient(CrystalUtils.GetPlayerPosFloored(entity))).forEach(filteredPositions::add);
}

public static boolean isCryDamageSufficient(final BlockPos enemy){
    return calculateDamage(enemy.getX(), enemy.getY(), enemy.getZ(), mc.player) > minDam.getValDouble();
}
sbtkgmzw

sbtkgmzw1#

过滤法( Stream<T> filter(Predicate<? super T> predicate); )需要一个 Predicate 作为参数,请尝试修改循环代码,如下所示:

for (EntityPlayer entity : entities) {
    sufficientBlocks.stream().filter(blockPos -> isCryDamageSufficient(blockPos)).forEach(filteredPositions::add);
}

相关问题