我有以下ArrayList
List<Integer> l = new ArrayList<Integer>(Arrays.asList(1,2,3,4,1,2,3,1,2,3,4,5,6));
那么它将是
[1,2,3,4,1,2,3,1,2,3,4,5,6]
现在我希望在下一次出现1时将列表拆分为subl ist 所以输出将是
[[1,2,3,4],[1,2,3],[1,2,3,4,5,6]]
如何做到这一点?列表列表
List<List<Integer>> ll = new ArrayList<List<Integer>>();
我的尝试是
ListIterator<Integer> li = steps.listIterator();
List<List<Integer>> fl = new ArrayList<List<Integer>>();
List<Integer> l = new ArrayList<Integer>();
while (li.hasNext()) {
if (li.next() == 1) {
l.add(li.next());
}
fl.add(l);
}
答案 0 :(得分:0)
当您调用iterator.next()
时,迭代器中的游标将在下一个位置移动。您可以在不使用iterator
仅使用foreach
循环的情况下重写算法,以避免光标移动时出错。
例如:
List<Integer> originalList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 1, 1, 2, 3, 1, 2, 3, 4, 5, 6));
List<List<Integer>> finalList = new ArrayList<>();
List<Integer> currentList = new ArrayList<>();
for (Integer current : originalList) {
if (current == 1) {
if (!currentList.isEmpty()) {
finalList.add(currentList);
}
currentList = new ArrayList<>();
}
currentList.add(current);
}
if (!currentList.isEmpty()) {
finalList.add(currentList);
}
或者,如果你有带有StreamEx Library的java 8,你可以更容易:
List<List<Integer>> streamExList = StreamEx.of(originalList)
.groupRuns((first, second) -> second != 1)
.collect(Collectors.toList());
答案 1 :(得分:0)
我正在使用 ArrayList 的 subList 方法来创建新的 ArrayList
工作代码如下:
List<Integer> steps = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4, 5, 6));
ListIterator<Integer> li = steps.listIterator();
List<List<Integer>> fl = new ArrayList<List<Integer>>();
List<Integer> indexes = new ArrayList<>();
while (li.hasNext()) {
if (li.next() == 1) {
indexes.add(li.nextIndex() - 1);
}
}
for (int i = 0; i < indexes.size(); i++) {
if (indexes.size() - 1 != i) {
fl.add(steps.subList(indexes.get(i), indexes.get(i + 1)));
} else {
fl.add(steps.subList(indexes.get(i), steps.size()));
}
}
System.out.println(fl);
是的,我在这里使用名为索引的新列表,添加查找位置的索引很有用。在这里,OfCourse我在新列表(索引)中分配的索引需要 -1 ,所以我编辑。
注意:强>
您在循环中使用了以下代码:
if (li.next() == 1) {
l.add(li.next());
}
这有两次 li.next(),最好将其分配给某个变量。它确实意味着如果你在你的循环中使用多次 li.next(),指针将移动到下一个位置,你不会得到你想要的结果,你可能遇到的运行时异常是的 NoSuchElementException异常强>