Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java流查找集合中最近的对_Java_Java Stream_Closest - Fatal编程技术网

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

使用Java流查找集合中最近的对,java,java-stream,closest,Java,Java Stream,Closest,我有一组元素,它们之间有一个距离度量。我正在寻找一种方法,从这个集合中找到最接近的元素对。使用循环,我将使用以下算法: double minDistance = Double.MAX_VALUE; AbstractMap.SimpleEntry<Element, Element> closestPair; for (Element element1 : elements) { for (Element element2 : elements) { double

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

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);
        }
    }
}
            
double minDistance=double.MAX_值;
AbstractMap.SimpleEntry closestPair;
用于(元素1:元素){
用于(元素2:元素){
双电流距离=元件1.距离(元件2);
如果(!element1.等于(element2)&¤tDistance

有没有一种优雅的方法可以使用Java streams实现此算法?

类似的方法,也许:

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()));
可选closestPair=elements.stream()
.flatMap(元素->元素.stream()
.filter(其他->!元素等于(其他))
.map(其他->新建SimpleEntry(元素,其他))
.min(Comparator.comparingDouble(e->e.getKey().distance(e.getValue()));

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

观点-使用一种方法来解决问题,例如试图找到所有对象之间的距离并将其存储在图形中,找到最小的边。(使用流编码时,后者可能很优雅)