search - Java 库方法在集合中查找项目并检查是否完全匹配

标签 search collections java iterable

是否有任何常见的 Java 库提供了一种方法来在有限集合中查找元素 确保只有一个匹配

例如,如果没有找到任何内容,该方法可以返回 null;如果找到多个元素,则该方法可以抛出异常。

目前,我使用自己的实现(见下文),但我不想用此类实用方法污染业务代码(即使在单独的实用程序包中提取)。

我也想要多次迭代集合的开销,或者过滤集合和查看结果长度的开销。

附注我当前的解决方案(有效,但要替换为库方法):

public static <T> T getSingleMatch(Iterable<T> lookIn, com.google.common.base.Predicate<? super T> predicate) {
    T foundItem = null;
    for (T item : lookIn) {
        if (predicate.apply(item)) {
            if (foundItem != null) 
                throw new RuntimeException("multiple matches"); // alternatively: `return null;` 
            else 
                foundItem = item;
        }
    }
    // alternatively: `if (foundItem == null) throw ...`
    return foundItem;
}

最佳答案

一种选择是将这两个想法分成两个方法,以便每个方法只做一件事 - 然后合并调用

  • 一种延迟过滤方法,返回一系列匹配结果
  • 一种从序列中返回项目的方法,要求它是唯一的项目

Guava两者都有:

例如:

String match = Iterables.getOnlyElement(Iterables.filter(source, predicate));

关于search - Java 库方法在集合中查找项目并检查是否完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18397031/

相关文章:

javascript - 从 ajax jquery post 响应中获取 <h2> 元素内的文本

java - 实现我自己的锻炼助手应用程序 - Collection 注意事项

java - 为什么不更常用 Collections.checkedMap 和 friend ?

java - Spring Controller 重定向到另一个页面

search - Elasticsearch - search_analyzer 与 index_analyzer

python - 在数组数组中查找数组索引的快速方法

java - 将 List<Foo> 重构为 FooList

java - Spring mvc 与 maven 给出 noHandlerFound 错误

java - 无法安装通用编解码器 jar 文件

javascript - 如何将 JSON 排序为值 a-z - React Native