持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
将List拆分为两个
将一个List拆分为多个List
| list | [1, 2, 3, 4, 5, 6, 7] |
|---|---|
| 第一段 | [1, 2, 3, 4] |
| 第二段 | [5, 6, 7] |
这里我们将一个集合从中心拆分为两个
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
int[] endpoints = {0, (list.size() + 1)/2, list.size()};
List<List<Integer>> result =
IntStream.rangeClosed(0, 1).mapToObj(
i -> list.subList(endpoints[i], endpoints[i + 1]))
.collect(Collectors.toList());
System.out.println(result.get(0));
System.out.println(result.get(1));
使用List提供的subList()方法将List拆分为两个子List
将LIst拆分为n个相等的部分
将List划分为相同大小,这里我们选择每块大小为2
| list | [1, 2, 3, 4, 5, 6, 7] |
|---|---|
| 1 | [1, 2] |
| 2 | [3,4] |
| 3 | [5,6] |
| 4 | [7] |
代码如下所示:
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
int size = 2;
final AtomicInteger counter = new AtomicInteger();
final Collection<List<Integer>> result = list.stream()
.collect(Collectors.groupingBy(
it -> counter.getAndIncrement() / size))
.values();
System.out.println(result);
从List中删除重复元素
删除重复元素是代码中经常使用的操作。
| list | [1, 2, 3, 4, 5, 5, 6, 6] |
|---|---|
| result | [1, 2, 3, 4, 5, 6 ] |
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 5, 6, 6));
List<Integer> result = new ArrayList<>(new LinkedHashSet<>(list));
System.out.println(result);
连接两个或多个List
有时我们希望将两个或多个列表连接到一个大列表中:
| list1 | [1, 2, 3, 4] |
|---|---|
| list2 | [5, 5, 6, 6] |
| 结果 | [1, 2, 3, 4, 5, 5, 6, 6] |
Stream类提供了很多有用的方法。这里我们使用Stream类执行来自两个列表的连接:
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
List<Integer> list2 = new ArrayList<>(Arrays.asList(5, 5, 6, 6));
List<Integer> result = Stream.concat(list1.stream(), list2.stream()).collect(Collectors.toList());
System.out.println(result);
我们使用了Stream类的concat()方法。我们还可以扩展此方法,可以一次加入两个以上的列表
通过条件加入列表
如果我们对列表中的数据有特殊要求,比如它们必须 > 3
| list1 | [1, 2, 3, 4] |
|---|---|
| list2 | [5, 5, 6, 6] |
| 结果 | [4, 5, 5, 6, 6] |
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
List<Integer> list2 = new ArrayList<>(Arrays.asList(5, 5, 6, 6));
List<Integer> result = Stream.concat(list1.stream(), list2.stream())
.filter(item -> item > 3)
.collect(Collectors.toList());
System.out.println(result);
这里我们使用了concat()方法连接两个集合。还用Stream类的filter()方法来过滤大于3的元素