如何将元素列表拆分为最多N个项目的列表?
例如:给定一个包含7个元素的列表,创建4个组,使最后一个组可能包含更少的元素.
split(List(1,2,3,4,5,6,"seven"),4)
=> List(List(1,2,3,4), List(5,6,"seven"))
Run Code Online (Sandbox Code Playgroud) 是否可以将纯Jdk8中的List分区为相等的块(子列表).
我知道可以使用Guava Lists类,但是我们可以使用纯Jdk吗?我不想在我的项目中添加新的jar,仅用于一个用例.
解决方案:
tagir-valeev提出了迄今为止最好的解决方案:
我还发现了其他三种可能性,但它们只适用于少数情况:
1.Collectors.partitioningBy()将列表拆分为2个子列表 - 如下所示:
intList.stream().collect(Collectors.partitioningBy(s -> s > 6));
List<List<Integer>> subSets = new ArrayList<List<Integer>>(groups.values());
Run Code Online (Sandbox Code Playgroud)
2.Collectors.groupingBy()将我们的列表拆分为多个分区:
Map<Integer, List<Integer>> groups =
intList.stream().collect(Collectors.groupingBy(s -> (s - 1) / 3));
List<List<Integer>> subSets = new ArrayList<List<Integer>>(groups.values());
Run Code Online (Sandbox Code Playgroud)
3.分离器分离:
List<Integer> intList = Lists.newArrayList(1, 2, 3, 0, 4, 5, 6, 0, 7, 8);
int[] indexes =
Stream.of(IntStream.of(-1), IntStream.range(0, intList.size())
.filter(i -> intList.get(i) == 0), IntStream.of(intList.size()))
.flatMapToInt(s -> s).toArray();
List<List<Integer>> subSets =
IntStream.range(0, indexes.length - 1)
.mapToObj(i …Run Code Online (Sandbox Code Playgroud) 给定一个java.util.List与n元素和所需的页面大小m,我想将它转换为包含地图n/m+n%m的元素.每个地图元素都应包含m元素.
这是一个整数的例子:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// What is the equivalent Java 8 code to create the map below from my list?
Map<Integer, List<Integer>> map = new HashMap<>();
map.put(0, Arrays.asList(1,2,3));
map.put(1, Arrays.asList(4,5,6));
map.put(2, Arrays.asList(7,8,9));
map.put(3, Arrays.asList(10));
Run Code Online (Sandbox Code Playgroud)
这是可能的,使用Java 8?
我正在努力学习java - stream.我能够做简单的迭代/过滤/地图/收集等.
当我试图收集每个3个元素并打印时,如本例所示,[收集每3个元素并打印等等...]
List<String> list = Arrays.asList("a","b","c","d","e","f","g","h","i","j");
int count=0;
String append="";
for(String l: list){
if(count>2){
System.out.println(append);
System.out.println("-------------------");
append="";
count=0;
}
append = append + l;
count++;
}
System.out.println(append);
Run Code Online (Sandbox Code Playgroud)
输出:
abc
-------------------
def
-------------------
ghi
-------------------
j
Run Code Online (Sandbox Code Playgroud)
我没有得到任何线索如何使用流这样做.我应该实现自己的收藏家来实现这一目标吗?
如何将列表拆分为给定数量的列表,按顺序获取元素并将它们分发到子列表(因此不对列表进行分区)?
我想尽可能"好"(使用Java 8功能或番石榴或类似的东西).
[1 2 3 4 5 6 7][1 4 7] [2 5] [3 6][1 3 5 7] [2 4 6]