gpt4 book ai didi

java - 从列表创建固定大小的子列表,如果元素较少,则添加零以完成子列表

转载 作者:行者123 更新时间:2023-12-02 11:37:16 25 4
gpt4 key购买 nike

我是 Java 8 的新手,正在尝试从列表中创建固定大小 5 个元素的分区。如果列表缺少元素,那么我需要向其添加零。

例如:如果原始列表有以下元素:[1,2,3,4,5,6,7]

子列表如下:[1,2,3,4,5],[6,7,0,0,0]

到目前为止,我找到了以下方法。如果子列表小于 5,有人可以帮我更改此设置以添加零吗?

public static <T> List<List<T>> splitLists(List<T> alist, final int len) {
return IntStream.range(0, alist.size())
.filter(i -> i % len == 0)
.boxed()
.map(i -> alist.subList(i, Math.min(i + len, alist.size())))
.collect(Collectors.toList());
}

此外,我需要将 BigDecimal 列表传递给此方法,但只想将其保留为通用列表,以便我也可以在其他场景中重用此方法。

List<BigDecimal> l = new ArrayList<>();
l.add(new BigDecimal(1));
l.add(new BigDecimal(2));
l.add(new BigDecimal(3));
l.add(new BigDecimal(4));
l.add(new BigDecimal(5));
l.add(new BigDecimal(6));
l.add(new BigDecimal(7));
List<List<BigDecimal>> findPattern = splitLists(l,5);

最佳答案

发布答案后更改问题是一个坏习惯。然而,BigDecimal,我们开始吧:

import java.math.BigDecimal

List<BigDecimal> l = new ArrayList<>();
l.add(new BigDecimal(1));
l.add(new BigDecimal(2));
l.add(new BigDecimal(3));
l.add(new BigDecimal(4));
l.add(new BigDecimal(5));
l.add(new BigDecimal(6));
l.add(new BigDecimal(7));

List<List<BigDecimal>> findPattern = splitLists(l, 5, new BigDecimal (0));

我们计算长度不匹配并添加一个中性元素。当然,我们需要获得 T 类型之一:

    int mismatch = len - (alist.size () % len);
for (int i = 0; i < mismatch; ++i)
alist.add (neutral);


public static <T> List<List<T>> splitLists (final List<T> alist, final int len, T neutral) {
int mismatch = len - (alist.size () % len);
for (int i = 0; i < mismatch; ++i) alist.add (neutral) ;
return IntStream.range(0, alist.size())
.filter(i -> i % len == 0)
.boxed()
.map(i -> alist.subList(i, Math.min(i + len, alist.size())))
.collect(Collectors.toList());
}

对该列表的调用还需要一个参数,即中性元素:

-> List<List<BigDecimal>> findPattern = splitLists(l, 5, new BigDecimal (0));
| Modified variable findPattern of type List<List<BigDecimal>> with initial value [[1, 2, 3, 4, 5], [6, 7, 0, 0, 0]]
| Update overwrote variable findPattern

(在 jshell 中进行测试,如果您想知道奇特的输出。)

如果您需要保持旧列表不变,请传递一个副本或在要处理的方法中创建一个副本。

关于java - 从列表创建固定大小的子列表,如果元素较少,则添加零以完成子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48837796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com