java - 使用 Java 流查找集合中最接近的对

标签 java java-stream closest

我有一组元素,它们之间有距离测量。我正在寻找一种方法来找到该集合中最接近的元素对。使用循环我将使用以下算法:

double minDistance = Double.MAX_VALUE;
AbstractMap.SimpleEntry<Element, Element> closestPair;
for (Element element1 : elements) {
    for (Element element2 : elements) {
        double currentDistance = element1.distance(element2);
        if (!element1.equals(element2) && currentDistance  < minDistance) {
            minDistance = currentDistance;
            closestPair = new AbstractMap.SimpleEntry(element1, element2);
        }
    }
}
            

是否有一种优雅的方式使用 Java 流来实现该算法?

最佳答案

也许是这样的:

Optional<SimpleEntry> closestPair = elements.stream()
    .flatMap(elem -> elements.stream()
        .filter(other -> !elem.equals(other))
        .map(other -> new SimpleEntry(elem, other))
    .min(Comparator.comparingDouble(e -> e.getKey().distance(e.getValue()));

但是您可能希望将这些内联 lambda 提取为单独的方法。

关于java - 使用 Java 流查找集合中最接近的对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65952678/

相关文章:

java - 对相同类型且具有关系的多个对象使用 drools

java - ArrayList<MyClass> 问题

java - 计算并删除字符串列表中的重复项,但将重复项添加到键中(任何惯用的 java8 式方式?)

java - 创建所有可能的元素组合

python - 在 Python 中找到最接近 3D 给定点的最快方法

java - RegEx - 从匹配中排除字符序列

java - Android 按钮的布局

dictionary - 如何从流中映射java中Duration字段的总和?

jquery - 如何获取最近输入Jquery的值

python : Only one element return in tuple return by find_closest