我有一个List<Users>。我想获取具有特定用户名的流中(第一个)用户的索引。我并不想实际上要求User对它们.equals()进行描述User,而只是具有相同的用户名。
List<Users>
User
.equals()
我可以想到执行此操作的丑陋方法(重复和计数),但是感觉应该有一个不错的方法可以执行此操作,可能是使用Streams。到目前为止,我拥有的最好的是:
int index = users.stream() .map(user -> user.getName()) .collect(Collectors.toList()) .indexOf(username);
这不是我写过的最糟糕的代码,但这不是很好。它也不是那么灵活,因为它依赖于一个映射类型的.equals()函数,该函数具有描述您要寻找的属性的函数。我宁愿有一些可以随心所欲的东西Function<T, Boolean>
Function<T, Boolean>
有人知道吗?
有时zipWithIndexJava中没有pythonic 。所以我遇到了这样的事情:
zipWithIndex
OptionalInt indexOpt = IntStream.range(0, users.size()) .filter(i -> searchName.equals(users.get(i))) .findFirst();
或者,您可以zipWithIndex从protonpack库中使用
注意
如果users.get不是恒定时间操作,则该解决方案可能很耗时。