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

标签 java list for-loop foreach

感谢您花时间阅读。

所以基本上我有两个“列表的列表”,一个用于垂直线,一个用于水平线。这些“列表的列表”中的每一个都包含 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循环将触及 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 流),那将会很有趣。

关于java - 比较列表列表中的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38378545/

相关文章:

android - Android 中错误的复选框选择?

javascript - 创建重复值的JS数组

java - SignalR Java 客户端 - 启动 HubConnection 时出现 NegotiationException

java - Kafka 消费者 ClassNotFoundException

java - 如何在 Selenium 2 中实现关键字 "Unselect Frame"?

python列表从for循环到一个列表

结合范围和数字列表的python

java - 每个循环都遇到麻烦

JavaScript for 循环

java - 具有不断变化的接口(interface)的装饰器模式