比较列表列表中的一个元素

时间:2016-07-14 15:39:40

标签: java list for-loop foreach

感谢您花时间阅读。

所以基本上我有两个“列表列表”,一个用于垂直线,一个用于水平线。这些“列表列表”中的每一个都包含Line2D元素的列表(我正在处理的每个形状的一个列表)。我想将每个列表的每个Line2D与其他列表中的每个其他元素进行比较(例如:水平行中第一个列表的第一个元素到OTHER水平行列表中的每个元素)。如果两条线比特定值更接近,则会发生某些情况。

我在这里找到了一些关于如何将列表中的一个项目与其他项目进行比较的有用提示,但如何为列表列表执行此操作会让我失望。我已经尝试了下面的代码,并收到一个索引超出界限索引:3大小:3例外。我是一个开始编码器,所以任何和所有的建议都非常感谢。如果我需要提供更多代码或任何其他信息,请告诉我。谢谢!

for(List<Line2D> list : horizontal) {
    for(int i = 0; i < list.size(); i++) {
        for(int j =i+1; j < horizontal.get(j).size(); j++) {
            if((Math.abs(list.get(i).getY1()) - Math.abs(horizontal.get(j).get(i).getY1())) < 0.4) {
                //do something
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

两个外部for循环将触及List<Line2D>的所有唯一对,可以从horizontal获取。对于每个这样的两个列表,内部两个for循环遍历所有可能的条目组合,计算Y1值中差异的绝对值,并在差异应小于某个值时采取措施阈值。

for (int i=0; i < horizontal.size(); ++i) {
    for (int j=i+1; j < horizontal.size(); ++j) {
        List<Line2D> line1 = horizontal.get(i);
        List<Line2D> line2 = horizontal.get(j);

        for (int k=0; k < line1.size(); ++k) {
            for (int l=0; l < line2.size(); ++l) {
                if (Math.abs(line1.get(k).getY1() - line2.get(l).getY1()) < 0.4) {
                    // do something
                }
            }
        }
    }
}

如果有人可以使用Java 8流发布更优雅的解决方案,那将会很有趣。