如何仅返回数组中某物的首次出现

时间:2018-07-26 16:28:05

标签: java loops

上下文:

我们有各种各样的鸟类身份。

bird {
 power:
 ...
 ...
 home:
 ...
 ...    
 status:
    [0] {age: 2, name: 'John'}
    [1] {age: 4, name: 'Gary'}
    [2] {age: 10, name: 'David'}
    [3] {age: 10, name: 'Jake'}
    [4] {age: 8, name: 'Steve'}
 phone:
 ...
 ...
}

我想做什么:

我想知道那只10岁的小鸟的名字。

不过,有几只鸟的年龄相同。我只想要第一次出现的名字。

所需的最终结果:

我希望它返回的结果是'David'。

当前结果:

我正在退还'David'和'Jake'。

我所做的事情:

List<BirdStatus<?>> birdStatusesToTake = bird.getStatuses().subList(0, bird.getStatuses().size());    

    for(BirdStatus birdStatus : birdStatusesToTake){
      if (birdStatus.getAge() == 10) {  
        System.out.println(birdStatus.getName());  
      }
    }

我的问题:

我如何只返回年龄10岁的第一只鸟的名字?

2 个答案:

答案 0 :(得分:5)

如果您使用的是Java 8或更高版本,则可以这样做:

bird.getStatuses().stream().filter(s -> s.getAge() == 10).findFirst().orElse(null);

在您的代码中使用break

for(BirdStatus birdStatus : birdStatusesToTake){
  if (birdStatus.getAge() == 10) {  
    System.out.println(birdStatus.getName()); 
    break;  //here you can use return birdStatus.getName();
  }
}

答案 1 :(得分:-1)

您还可以创建一个从0开始的计数器,将if语句放入仅在计数器为0时有效的while循环中,然后在if主体中向计数器添加1:

int counter = 0;
while ( counter == 0){for(BirdStatus birdStatus : birdStatusesToTake){
      if (birdStatus.getAge() == 10) {  
        System.out.println(birdStatus.getName());
        counter ++;

      }

}