我有一个 List<Users>
。我想获取流中具有特定用户名的(第一个)用户的索引。我不想实际要求 User
是 .equals()
一些描述的 User
相同的用户名,只是为了拥有相同的用户名
我可以想到丑陋的方法来做到这一点(迭代和计数),但感觉应该有一个很好的方法来做到这一点,可能是通过使用 Streams。到目前为止,我拥有的最好的是:
int index = users.stream()
.map(user -> user.getName())
.collect(Collectors.toList())
.indexOf(username);
这不是我写过的最糟糕的代码,但也不是很好。它也不是那么灵活,因为它依赖于有一个映射函数到一个类型,该类型具有描述您要查找的属性的 .equals()
函数;我宁愿有一些可以任意使用的东西 Function<T, Boolean>
任何人都知道如何?
原文由 Edward Peters 发布,翻译遵循 CC BY-SA 4.0 许可协议
偶尔在java中没有
zipWithIndex
。所以我遇到了类似的事情:或者,您可以使用 protonpack 库中的
zipWithIndex
笔记
如果 users.get 不是恒定时间操作,该解决方案可能很耗时。