【问题标题】:How do I loop through a list of lists in order to manipulate the contents of the inner lists? [duplicate]如何遍历列表列表以操作内部列表的内容? [复制]
【发布时间】:2020-11-16 22:12:55
【问题描述】:

我想遍历列表列表并访问内部列表项,以便有条件地将项目附加到列表中。我在想象一些类似的东西

 for each sublist in mainlist, 
     if sublist[4] = "x" and sublist[5] = "y", 
       sublist.add("z")

我没有问题添加到列表或比较字符串,我只是不知道如何从循环主列表到检查子列表中的项目。

【问题讨论】:

标签: java arraylist


【解决方案1】:

下面是一个非常简单的例子,用 Java 循环遍历列表:

import java.util.ArrayList;
import java.util.List;

public class Main {
    
    public static void main(String[] args) {
        
        List<ArrayList<String>> mainList = new ArrayList<ArrayList<String>>();
        
        ArrayList<String> subList1 = new ArrayList<String>();
        subList1.add("A");
        subList1.add("B");
        
        mainList.add(subList1);
 
        ArrayList<String> subList2 = new ArrayList<String>();
 
        subList2.add("C");
        subList2.add("D");
        mainList.add(subList2);
        
        for (int i = 0; i < mainList.size(); i++) { 
            for (int j = 0; j < mainList.get(i).size(); j++) { 
                System.out.print(mainList.get(i).get(j) + " "); 
            } 
            System.out.println(); 
        } 
        
        // Using for each
        System.out.println("Using for-each");
        mainList.forEach((list)  -> {list.forEach((alphabet)->System.out.println(alphabet)); });
    }
}

样本输出:

A B                                                                                                                                                        
C D   
                                                                                                                                                 
Using for-each                                                                                                                                             
A                                                                                                                                                          
B                                                                                                                                                          
C                                                                                                                                                          
D

现在你可以放置你想要的条件了。

【讨论】:

    【解决方案2】:

    试试这个方法:

    public static void main(String[] args) {
    
            List<List<String>> parentList = new ArrayList();
    
            List<String> listA = new ArrayList<String>();
            listA.add("listA-item1");
            listA.add("listA-item2");
            listA.add("listA-item3");
    
            List<String> listB = new ArrayList<String>();
            listB.add("listB-item1");
            listB.add("listB-item2");
            listB.add("listB-item3");
    
            parentList.add(listA);
            parentList.add(listB);
    
            for (List<String> list : new ArrayList<>(parentList)) {
    
                for (String s : new ArrayList<>(list)) {
                    list.remove(s);
                    s += " appended thing";
                    list.add(s);
                }
            }
    
            listA.forEach(System.out::println);
            listB.forEach(System.out::println);
    
        }
    

    输出是:

    listA-item1 appended thing
    listA-item2 appended thing
    listA-item3 appended thing
    listB-item1 appended thing
    listB-item2 appended thing
    listB-item3 appended thing
    

    请注意我在 foreach 语句中创建了新的 ArralyList :

    for (List<String> list : new ArrayList<>(parentList)) {
    
                for (String s : new ArrayList<>(list)) {
    

    如果你不这样做,你会得到java.util.ConcurrentModificationException

    【讨论】:

      【解决方案3】:

      根据发布的代码,它完全符合要求。主列表是列表列表,子列表是字符串列表,将 z 添加到子列表会在主列表中更新它,因为您正在更新引用。

      Java 版本可能是:

      for (List <String> subList: mainList) {
        if (null != sublist && !sublist.isEmpty() && sublist.get(4).equals("x") &&
          sublist.get(5).equals("y")) {
          sublist.add("z");
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-02
        • 2021-09-06
        • 2019-02-14
        • 1970-01-01
        • 2020-07-18
        • 2019-06-25
        • 1970-01-01
        相关资源
        最近更新 更多