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