【发布时间】:2020-11-16 22:12:55
【问题描述】:
我想遍历列表列表并访问内部列表项,以便有条件地将项目附加到列表中。我在想象一些类似的东西
for each sublist in mainlist,
if sublist[4] = "x" and sublist[5] = "y",
sublist.add("z")
我没有问题添加到列表或比较字符串,我只是不知道如何从循环主列表到检查子列表中的项目。
【问题讨论】:
我想遍历列表列表并访问内部列表项,以便有条件地将项目附加到列表中。我在想象一些类似的东西
for each sublist in mainlist,
if sublist[4] = "x" and sublist[5] = "y",
sublist.add("z")
我没有问题添加到列表或比较字符串,我只是不知道如何从循环主列表到检查子列表中的项目。
【问题讨论】:
下面是一个非常简单的例子,用 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
现在你可以放置你想要的条件了。
【讨论】:
试试这个方法:
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
【讨论】:
根据发布的代码,它完全符合要求。主列表是列表列表,子列表是字符串列表,将 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");
}
}
【讨论】: