List <String>类型中的get(int)方法不适用于Java 8中的参数字符串

8 java predicate java-8 java-stream

我正在尝试在中搜索元素List<String>,但收到此编译错误:

get(int)类型中的方法List<String>不适用于参数字符串。

这是代码:

private boolean findIdInTheList(List<String> ids, String id) {
    String theId = ids.stream()
            .filter(elem -> id.equals(ids.get(elem)))
            .findAny()
            .orElse(null);
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 3

ids是一个List<String>并且elem是一个String。因此ids.get(elem)无效,因为List没有get采用String.

它应该是:

private boolean findIdInTheList(List<String> ids, String id) {
    String theId = ids.stream()
                      .filter(elem -> id.equals(elem))
                      .findAny()
                      .orElse(null);
}
Run Code Online (Sandbox Code Playgroud)

哦,由于您的方法有boolean返回类型,因此您应该添加一个 return 语句。

您可以使用以下方法简化管道anyMatch

private boolean findIdInTheList(List<String> ids, String id) {
    return ids.stream()
              .anyMatch(elem -> id.equals(elem));
}
Run Code Online (Sandbox Code Playgroud)

这里你得到一个boolean指示是否idList. 我认为返回String本身没有意义,因为您已经知道它等于id

  • @gaby你可以写 `if (!ids.stream().anyMatch(elem -&gt; id.equals(elem))) {ids.add(id);}`,尽管我不会使用 `Stream`那。只需执行 `if (ids.indexOf(id)&lt;0) ids.add(id);` (2认同)