繁体   English   中英

比较 ArrayList 中的元素

[英]Compare elements from an ArrayList

我有一个小问题,我想遍历一个列表并比较数组的两个对象。 每个对象有 3 个元素,我使用 StringTokenizer 来去除分隔符,所以每个对象有 3 个元素。 我想知道如何制作一个方法来获取每个对象的第三个元素并进行比较。 如果该元素小于另一个删除该元素和它之前的 2。

我试图用迭代器制作它们,但我不太清楚它是从 3 元素开始并将位置增加 3。

Iterator<Integer> it = lisM.iterator();
                int num;
                while (it.hasNext()){
                    num = it.next();
                    System.out.println(num);

                }

视觉示例

是 --> 如果,我把它放在图片中是错误的

这仅回答了您的部分问题。 我无法完全理解这个问题,请编辑它,我可以编辑我的答案。

您不应该在 for 循环中从列表中删除项目,因此您可以,例如,创建另一个大小相同的布尔列表除以 3,然后用真正的布尔值填充它,然后将除以 3 的位置设置为false如果您想删除这三个项目。 然后您可以创建一个新列表,遍历布尔列表并一次添加 3 个实际上是字符串的“对象”(感谢 @JB Nizet),每次布尔列表元素为真时。 当它为 false 时,您只是不添加元素,这样做实际上是在删除该元素之前的两个元素以及该元素。

您将String转换为int ,这不起作用您必须解析字符串。

我更正了您的一些代码并在此处添加了布尔列表:

    ArrayList<String> lisM = new ArrayList<>();  // here I initialise the list as an array list with strings. 

    ArrayList<Boolean> booleanList = new ArrayList<>();
    for (int i = 0; i < lisM.size() / 3; i++) {
        booleanList.add(true);
    }

    for(int i = 3; i < lisM.size();i+=3) {
        int m = Integer.parseInt(lisM.get(i)); // here I changed the casting to parsing and moved it out of the for loop, there is no need to initialize it again every single time since you do not change it in the second for loop.
        for (int j = 6; j < lisM.size(); j += 6) {
            int m1 = Integer.parseInt(lisM.get(j));// here I changed the casting to parsing again.
            if (m > m1) { // this makes no sense here because you are going over all of the elements of the list and comparing them to all of them. But I kept it here for the sake of example.
                booleanList.set(i/3,false); 
            }

// 如果您想查看整个列表,则必须清除列表并为每个元素重新开始。 下面是如何在不包含不需要的元素的情况下创建新列表的方法:

ArrayList<String> newLisM = new ArrayList<>();

for (int i = 0; i <booleanList.size(); i++) {
        if(booleanList.get(i))
            for (int j = 0; j < 3; j++) {
                newLisM.add(lisM.get(i+j));
            }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM