如何从 ArrayList 交换两个子列表?
How to swap two SubLists from ArrayList?
var numbers = new ArrayList<Integer>(100);
for (var i = 1; i <= 100; i++) {
numbers.add(i);
}
这是一串数字(仅供举例)
但是,它以错误的数字开头。
我需要它以 21 开头,而不是 1。
修改循环会不必要地复杂。将 ArrayList
分成两个 List
并交换它们更容易。
numbers = Stream.concat(numbers.subList(20, 100).stream(), numbers.subList(0, 20).stream()).collect(Collectors.toCollection(ArrayList::new));
我使用了concat
方法,它合并了两个ArrayLists
和subList
方法,returns是ArrayList
的一部分。
但是,创建一个仅顺序不同的新 ArrayList
是不合逻辑的。
用sorted方法就可以了,就是不知道怎么写才能正确排序
请帮忙
谢谢
基本上在对比较器进行排序时,您会得到 2 个数字(假设 n1
和 n2
),并根据 return 值对它们进行排序。
- 如果 returned 为负值,
n1
排在 n2
之前
- 如果 returned 为正值,则
n2
排在 n1
之前
- 如果
0
被 return 编辑,则两者在顺序上被认为是相等的
牢记这一点,您可以编写排序比较器以提供以下行为。
- 如果
n1
和 n2
都在同一区域(在 0-19
或 20-100
之间),则照常对它们进行排序
- 如果
n1
和n2
在不同的地区,则将属于20-100
的号码(两者中较大的号码)排在另一个
示例代码,
numbers =
(ArrayList<Integer>)
numbers.stream()
.sorted((n1, n2) -> {
if (((n1 >= 21) && (n2 >= 21)) || ((n1 <= 20) && (n2 <= 20))) {
return n1 - n2;
} else {
return n2 - n1;
}
}).collect(Collectors.toList());
var numbers = new ArrayList<Integer>(100);
for (var i = 1; i <= 100; i++) {
numbers.add(i);
}
这是一串数字(仅供举例)
但是,它以错误的数字开头。
我需要它以 21 开头,而不是 1。
修改循环会不必要地复杂。将 ArrayList
分成两个 List
并交换它们更容易。
numbers = Stream.concat(numbers.subList(20, 100).stream(), numbers.subList(0, 20).stream()).collect(Collectors.toCollection(ArrayList::new));
我使用了concat
方法,它合并了两个ArrayLists
和subList
方法,returns是ArrayList
的一部分。
但是,创建一个仅顺序不同的新 ArrayList
是不合逻辑的。
用sorted方法就可以了,就是不知道怎么写才能正确排序
请帮忙
谢谢
基本上在对比较器进行排序时,您会得到 2 个数字(假设 n1
和 n2
),并根据 return 值对它们进行排序。
- 如果 returned 为负值,
n1
排在n2
之前
- 如果 returned 为正值,则
n2
排在n1
之前
- 如果
0
被 return 编辑,则两者在顺序上被认为是相等的
牢记这一点,您可以编写排序比较器以提供以下行为。
- 如果
n1
和n2
都在同一区域(在0-19
或20-100
之间),则照常对它们进行排序 - 如果
n1
和n2
在不同的地区,则将属于20-100
的号码(两者中较大的号码)排在另一个
示例代码,
numbers =
(ArrayList<Integer>)
numbers.stream()
.sorted((n1, n2) -> {
if (((n1 >= 21) && (n2 >= 21)) || ((n1 <= 20) && (n2 <= 20))) {
return n1 - n2;
} else {
return n2 - n1;
}
}).collect(Collectors.toList());