Java8 - 在Map中搜索值

时间:2016-07-27 08:39:33

标签: java java-8

我正在学习Java8,并希望了解如何将以下内容转换为Java8流API,并在找到第一个'匹配'后停止'(如下面的代码所示)

public int findId(String searchTerm) {

    for (Integer id : map.keySet()) {
        if (map.get(id).searchTerm.equalsIgnoreCase(searchTerm))
            return id;
    }
    return -1;
}

2 个答案:

答案 0 :(得分:11)

没有测试,这样的事情应该有效:

return map.entrySet()
          .stream()
          .filter(e-> e.getValue().searchTerm.equalsIgnoreCase(searchTerm))
          .findFirst() // process the Stream until the first match is found
          .map(Map.Entry::getKey) // return the key of the matching entry if found
          .orElse(-1); // return -1 if no match was found

这是在entrySet的流中搜索匹配并在找到匹配时返回键的组合,否则返回-1。

答案 1 :(得分:1)

使用谓词过滤流后,您需要的是Stream#findFirst()方法。像这样:

map.entrySet()
    .stream()
    .filter(e -> e.getValue().equalsIgnoreCase(searchTerm))
    .findFirst();

这将返回Optional,因为过滤后可能没有任何元素。