Java 根据条件从列表中查找索引号

Java 根据条件从列表中查找索引号,java,Java,如何在满足条件的列表中查找对象的索引号 int index = list.indexOf(list.stream().filter(a-> a.getInfo().getDetails().getIndicator().equals("3"))); list.remove(index) 如果指示符为3,我需要获取索引值。您可以使用IntStream根据索引迭代列表,并获取满足条件对象的索引 IntStream.range(0,list.size())

如何在满足条件的列表中查找对象的索引号

int index = list.indexOf(list.stream().filter(a-> a.getInfo().getDetails().getIndicator().equals("3")));
  list.remove(index)

如果指示符为3,我需要获取索引值。您可以使用
IntStream
根据索引迭代列表,并获取满足条件对象的索引

IntStream.range(0,list.size())
         .filter(i->list.get(i).getInfo().getDetails().getIndicator().equals("3"))
         .findFirst()
         .orElse(-1) // return -1 as default

由于您在问题代码中包含了
list.remove(index)
,如果您想删除满足条件的项目,请不要获取索引,然后按索引删除,只需使用:

list.removeIf(a->a.getInfo().getDetails().getIndicator().equals(“3”);

使用oldschool迭代器,您可以:

  • 迭代时删除匹配元素

  • 全部删除

      for(Iterator<YourType> it=items.iterator();it.hasNext();)
      {
          YourType element=it.next();
          if(element.getInfo().getDetails().getIndicator().equals("3"))
              it.remove();
      }
    
    for(Iterator it=items.Iterator();it.hasNext();)
    {
    YourType元素=it.next();
    if(element.getInfo().getDetails().getIndicator().equals(“3”))
    it.remove();
    }
    

这似乎真的很愚蠢。你已经有了你的锤子(溪流),而寻找索引的方法就是抓鱼。所以现在你正试着把锤子扔进湖里,希望你能用它打鱼。请别这样。安德烈亚斯的回答似乎是对兰博达斯的巧妙运用。请注意,对于链表,您的方法是O(n^2),例如每次都运行(.get(n),如果.iterator()的话,这是一个非常愚蠢的计划/ye olde reliable foreach就在那里。我对Andreas的答案非常满意,如果OP打算删除满足条件的对象,我建议他使用Andreas的答案。但是如果我们真的想得到对象的索引,那么我想说明这是使用streams@rzwitserloot的方法