我有一个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不是恒定时间操作,则该解决方案可能很耗时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句