除了使用循环之外,有没有一种方法可以简化这种情况?

时间:2018-08-14 09:16:10

标签: java

        if(robots[0] != null && !robots[0].isStrong()) {
            if(robots[1] != null &&!robots[1].isStrong()) {
                if(robots[2] != null &&!robots[2].isStrong()) {
                        //do something
                }
            }
        }

我想检查一下所有机器人是否不坚固,如果不都坚固,那就做点什么。 想象一下,我有10个机器人,如果条件允许,我是否必须写10个机器人?

9 个答案:

答案 0 :(得分:8)

假设您要检查robots数组的每个元素的这些条件是否成立,并且您正在使用Java 8或更高版本:

if (Arrays.stream(robots).allMatch(r -> r!=null && !r.isStrong())) {
    // do whatever
}

答案 1 :(得分:3)

使用Stream.ofallMatch

Robot[] robots = new Robot[10];
// ... fill array
if (Stream.of(robots).allMatch(r -> r != null && ! r.isStrong())) {
    // ...
}

答案 2 :(得分:2)

boolean allStrong = true;
for (int i = 0; i < robots.length; i++) {
    allStrong = allStrong && robots[i].isStrong();
    if (!allStrong) break; // exit loop because condition is already false
}

更新

boolean allWeak = true;
for (int i = 0; i < robots.length; i++) {
    allWeak = allWeak && !robots[i].isStrong();
    if (!allWeak) break; // exit loop because condition is already true
}

答案 3 :(得分:2)

数组的全部目的是(几乎)从不使用显式索引(例如robots[0]),而是依靠 loop 构造,例如:

for (Robot robot : robotArrayOrList) {
  do something about each robot instance

答案 4 :(得分:1)

使用循环或流,流更干净

使用循环

int stupidCountVar = 0;
for (int i=0; i < robots.size(); i++) {

if (robots[i] != null && !robots[i].isStrong()) 
   {
      stupidCountVar++; 
   }
}

if(stupidCountVar==robots.size())
{
   // your code to survive
}

使用流过滤数据

Stream<String> yourArrayStream = Arrays.stream(robots);
fitRobots = yourArrayStream.filter(robot - > robot!= null && !robot.isStrong())
               .collect(Collectors.toList());

[编辑]- 现在就您而言-

if (yourArrayStream.allMatch(robot -> robot !=null && !robot.isStrong())) {
// your code to survive
}

答案 5 :(得分:0)

您可以循环查看所有这些内容:

boolean myCondition = true;

for(int i= 0; i < robots.length; i++){
  if(robots[i] == null || robots[i].isStrong() ){
    myCondition = false;
  }
}

// so here you know if myCondition is true or false

答案 6 :(得分:0)

您可以使用信息流来过滤必填项:

Predicate<Robot[]> isAllNotStrong = robots -> Optional.of(Arrays.stream(robots)).orElseGet(Stream::empty)
                                                       .filter(Objects::nonNull)
                                                       .noneMatch(Robot::isStrong);

答案 7 :(得分:0)

如果您有一系列机器人,则可以使用自己喜欢的循环或迭代器对其进行迭代:

for(int i = 0; i < robots.length; i++) {
    if(robots[i] == null || robots[i].isStrong()) return false;
}

答案 8 :(得分:0)

boolean notStrong = false;
for (Robot robot : robotArray) {
  if( robot == null || !robots[i].isStrong() ) {
     notStrong = true;
     break;
  }
}
// this avoids running the Loop again and again if the condition already fails