当前位置: 首页 > 面试题库 >

流方式获取与布尔值匹配的第一个元素的索引

宋原
2023-03-14
问题内容

我有一个List<Users>。我想获取具有特定用户名的流中(第一个)用户的索引。我并不想实际上要求User对它们.equals()进行描述User,而只是具有相同的用户名。

我可以想到执行此操作的丑陋方法(重复和计数),但是感觉应该有一个不错的方法可以执行此操作,可能是使用Streams。到目前为止,我拥有的最好的是:

int index = users.stream()
    .map(user -> user.getName())
    .collect(Collectors.toList())
    .indexOf(username);

这不是我写过的最糟糕的代码,但这不是很好。它也不是那么灵活,因为它依赖于一个映射类型的.equals()函数,该函数具有描述您要寻找的属性的函数。我宁愿有一些可以随心所欲的东西Function<T, Boolean>

有人知道吗?


问题答案:

有时zipWithIndexJava中没有pythonic 。所以我遇到了这样的事情:

OptionalInt indexOpt = IntStream.range(0, users.size())
     .filter(i -> searchName.equals(users.get(i)))
     .findFirst();

或者,您可以zipWithIndex从protonpack库中使用

注意

如果users.get不是恒定时间操作,则该解决方案可能很耗时。



 类似资料:
  • 这不是我写过的最糟糕的代码,但也不是很好。它也不是那么灵活,因为它依赖于一个映射函数到一个带有函数的类型,该函数描述了您要查找的属性;我更希望有一个可以用于任意的东西 有人知道怎么做吗?

  • 如何在流中获得第一个匹配条件的元素?我试过了,但不起作用 如果条件不起作用,则在Stop以外的其他类中调用filter方法。

  • 我知道如何通过谓词查找列表的第一个元素:Java8通过谓词查找第一个元素 有没有一种简单的方法可以得到那个元素的索引? 编辑:链接的问题确实提供了答案,但我在搜索时找不到它,因为它的措辞。因此,我宁愿保留这个问题。

  • 问题内容: 我想知道是否有一种已知的,内置的/优雅的方法来找到匹配给定条件的JS数组的第一个元素。AC#等效项为List.Find。 到目前为止,我一直在使用这样的两功能组合: 然后我可以使用: 但是,既然ECMAScript中有[太多的函数式数组方法,也许已经有这样的东西了?我想很多人必须一直执行这样的事情… 问题答案: 从ES6开始,存在数组的本机方法。一旦找到第一个匹配项并返回值,此操作将停

  • 我想知道是否有一种已知的、内置的/优雅的方法来查找匹配给定条件的JS数组的第一个元素。C#的等价物将是list.find。 到目前为止,我一直在使用这样的两个功能组合: 然后我可以使用: 但是由于ECMAScript中有这么多函数式数组方法,也许已经有类似的东西了?我想很多人都要一直在做这样的事情...

  • 问题内容: 我有一个数组: 我想获得此数组的第一个元素。预期结果: 字符串 一个要求: 它不能通过引用传递来完成 ,所以不是一个好的解决方案。 我怎样才能做到这一点? 问题答案: 原始答案,但代价昂贵(O(n)): 在O(1)中: 其他用例等 如果修改(就重置数组指针而言)不是问题,则可以使用: 如果需要数组“副本”,则从理论上讲应该更有效: 使用PHP 5.4+(但如果为空,则可能导致索引错误)