我正在学习Java8,并希望了解如何将以下内容转换为Java8流API,并在找到第一个'匹配'后停止'(如下面的代码所示)
public int findId(String searchTerm) {
for (Integer id : map.keySet()) {
if (map.get(id).searchTerm.equalsIgnoreCase(searchTerm))
return id;
}
return -1;
}
答案 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,因为过滤后可能没有任何元素。