【问题标题】:How to return only the first occurrence of something in an Array如何只返回数组中第一次出现的东西
【发布时间】:2018-07-26 16:28:04
【问题描述】:

上下文:

我们有一系列鸟类的状态。

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”和“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 岁的鸟的名字?

【问题讨论】:

  • 我已经尝试过 indexOf() 之类的方法,但仍然无法得到想要的结果。
  • 您有一个return 声明。因此,一旦找到匹配项,它将不会继续。所以,你一定只能得到David
  • 这是在方法中吗?
  • 是的,它在一个方法中
  • @EagleOne 您从哪里调用该方法?

标签: java loops


【解决方案1】:

如果您使用的是 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();
  }
}

【讨论】:

  • break 或只是return birdStatus.getName()
  • 好吧,好像他已经有了这个(之前编辑过一次),但改成了打印,谁知道为什么??
  • @CarlosHeuberger 实际上我不想返回它...我想直接在这里将它写入一个 excel 文件。
  • 如果您想将其写入 excel。然后在 write 之后你可以使用 break 或 return
  • @EagleOne 事实上你问过(至少两次)“我怎么才能回来......”很难猜出你在网上的想法
【解决方案2】:

您也可以创建一个从 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 ++;

      }

}

【讨论】:

  • 这比breaking 有什么优势?
  • 为什么要使用int 来表示本质上是boolean 标志的东西?
猜你喜欢
  • 2012-02-02
  • 2016-10-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多