小编典典

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

java

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

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

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

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

有人知道吗?


阅读 210

收藏
2020-09-16

共1个答案

小编典典

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

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

或者,您可以zipWithIndexprotonpack库中使用

注意

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

2020-09-16