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

Java 比较列表列表中的一个元素,java,list,for-loop,foreach,Java,List,For Loop,Foreach,感谢您抽出时间阅读 所以基本上我有两个“列表列表”,一个用于垂直线,一个用于水平线。每个“列表列表”都包含Line2D元素列表(我处理的每个形状都有一个列表)。我想将每个列表的每个Line2D与其他列表中的每个其他元素进行比较(例如:水平行中第一个列表的第一个元素与其他水平行列表中的每个元素)。如果这两条线的距离小于某个值,就会发生某些情况 我在这里找到了一些有用的技巧,关于如何将列表中的一个项目与所有其他项目进行比较,但如何对列表执行此操作却让我不知所措。我尝试了下面的代码,收到一个索引越界异

感谢您抽出时间阅读

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

我在这里找到了一些有用的技巧,关于如何将列表中的一个项目与所有其他项目进行比较,但如何对列表执行此操作却让我不知所措。我尝试了下面的代码,收到一个索引越界异常索引: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
            }
        }
    }
}
for(列表:水平){
对于(int i=0;i
用于循环的两个外部
将接触到可从
水平
获取的所有唯一的
列表对。对于每一个这样的两个列表,内部的两个
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
                }
            }
        }
    }
}
for(int i=0;i

如果有人能发布一个更优雅的解决方案,可能会使用Java 8 streams,那会很有趣。

另外,这是最好的方法吗?我相信有一种更“优雅”的方式来比较这些元素。
List
的元素不是列表,而是
Line2D
元素。你有显示列表列表的代码片段吗?@TimBiegeleisen
horizontal
是2Dlist@4castle我看到了这一点,为我提出这个问题感到羞耻。如果您碰巧使用Java 8,那么使用
,将有一些非常优雅的方法来实现这一点,但这一切都取决于我相信做什么(Math.abs(line1.get(k).getY1())
需要
(Math.abs(line1.get(k).getY1())
要正确封装
Math.abs
函数?现在就测试它,然后再报告!@ThorCodinson你是对的,我在那里遇到了一个问题。实际上,
Math.abs()
应该封装整个差异。我从错误使用它的OP复制了它。