如何在满足某些条件的流中找到第二个元素?

Ham*_*men 6 java lambda java-8

我想显示名称以's'开头的流的第二个元素.

我试过了:

employees.stream()
         .filter(e -> e.getName().charAt(0) == 's')
         .findAny()
         .ifPresent(e -> System.out.println("Employee : " + e));
Run Code Online (Sandbox Code Playgroud)

但是,当我使用时findAny(),它返回流中的第一个元素(与之相同findFirst()),我想要第二个元素.

Era*_*ran 12

您可以通过skip(1)在过滤器后添加来跳过第一个匹配:

employees.stream()
         .filter(e -> e.getName().charAt(0) == 's')
         .skip(1)
         .findAny()
         .ifPresent(e -> System.out.println("Employee : " + e));
Run Code Online (Sandbox Code Playgroud)

  • +1.如果使用单线程流,我会添加到最好使用findFirst,因为这里不需要使用findAny (2认同)