我有一个List<Users>
。我想获取具有特定用户名的流中(第一个)用户的索引。我并不想实际上要求User
对它们.equals()
进行描述User
,而只是具有相同的用户名。
我可以想到执行此操作的丑陋方法(重复和计数),但是感觉应该有一个不错的方法可以执行此操作,可能是使用Streams。到目前为止,我拥有的最好的是:
int index = users.stream()
.map(user -> user.getName())
.collect(Collectors.toList())
.indexOf(username);
这不是我写过的最糟糕的代码,但这不是很好。它也不是那么灵活,因为它依赖于一个映射类型的.equals()
函数,该函数具有描述您要寻找的属性的函数。我宁愿有一些可以随心所欲的东西Function<T, Boolean>
有人知道吗?
有时zipWithIndex
Java中没有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+(但如果为空,则可能导致索引错误)