我正在尝试将列表拆分为列表列表,其中每个列表的最大大小为4。
我想知道如何使用lambdas做到这一点。
目前我的做法如下:
List<List<Object>> listOfList = new ArrayList<>();
final int MAX_ROW_LENGTH = 4;
int startIndex =0;
while(startIndex <= listToSplit.size() )
{
int endIndex = ( ( startIndex+MAX_ROW_LENGTH ) < listToSplit.size() ) ? startIndex+MAX_ROW_LENGTH : listToSplit.size();
listOfList.add(new ArrayList<>(listToSplit.subList(startIndex, endIndex)));
startIndex = startIndex+MAX_ROW_LENGTH;
}
更新
似乎没有一种简单的方法可以使用lambdas来拆分列表。虽然所有的答案都很受欢迎,但它们也是一个很好的例子,说明lambdas不能简化事情。
当然,以下就足够了
final List<List<Object>> listOfList = new ArrayList<>(
listToSplit.stream()
.collect(Collectors.groupingBy(el -> listToSplit.indexOf(el) / MAX_ROW_LENGTH))
.values()
);
流式传输,使用分组收集:这给出了对象的映射-
如果你真的需要一个lambda,可以这样做。不然前面的回答更好。
List<List<Object>> lists = new ArrayList<>();
AtomicInteger counter = new AtomicInteger();
final int MAX_ROW_LENGTH = 4;
listToSplit.forEach(pO -> {
if(counter.getAndIncrement() % MAX_ROW_LENGTH == 0) {
lists.add(new ArrayList<>());
}
lists.get(lists.size()-1).add(pO);
});
请尝试以下方法:
static <T> List<List<T>> listSplitter(List<T> incoming, int size) {
// add validation if needed
return incoming.stream()
.collect(Collector.of(
ArrayList::new,
(accumulator, item) -> {
if(accumulator.isEmpty()) {
accumulator.add(new ArrayList<>(singletonList(item)));
} else {
List<T> last = accumulator.get(accumulator.size() - 1);
if(last.size() == size) {
accumulator.add(new ArrayList<>(singletonList(item)));
} else {
last.add(item);
}
}
},
(li1, li2) -> {
li1.addAll(li2);
return li1;
}
));
}
System.out.println(
listSplitter(
Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
4
)
);
还请注意,可以优化此代码,而不是:
new ArrayList<>(Collections.singletonList(item))
使用这个:
List<List<T>> newList = new ArrayList<>(size);
newList.add(item);
return newList;
如何使用stream转换下面的代码而不使用for each循环。 getAllSubjects()返回所有列表,每个主题都有。所有列表应合并为。 需要从中获取 对象模型:
我正在查看的文档,我看到了方法,但无法直接转到 是否有方法将转换为?
问题内容: 我是Python的新手,需要将列表转换为字典。我知道我们可以将元组列表转换为字典。 这是输入列表: 并且我想将此列表转换为元组列表(或直接转换为字典),如下所示: 我们如何在Python中轻松做到这一点? 问题答案: 您想一次将三个项目分组吗? 您想一次分组N个项目吗?
问题内容: 我已经编写了此函数,用于将元组列表转换为列表列表。有没有更优雅的/ Pythonic的方式来做到这一点? 问题答案: 您可以使用列表推导:
问题内容: 如果我有一个,如何通过使用Java 8的功能将其转换为以相同的迭代顺序包含所有对象的? 问题答案: 你可以用于将内部列表(将它们转换为Streams之后)展平为单个Stream,然后将结果收集到列表中:
在我的Spring Boot项目中,我有两个类(实体和模型) 在模型中有一个列表 :