Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从列表中创建固定大小的子列表,如果元素较少,则添加零以完成子列表_Java_List_Generics_Collections - Fatal编程技术网

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

Java 从列表中创建固定大小的子列表,如果元素较少,则添加零以完成子列表,java,list,generics,collections,Java,List,Generics,Collections,我是Java8新手,正在尝试从列表中创建固定大小的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, fin

我是Java8新手,正在尝试从列表中创建固定大小的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()); 
}
公共静态列表拆分列表(列表列表,最终整数){
返回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);
listl=newarraylist();
l、 添加(新的BigDecimal(1));
l、 添加(新的BigDecimal(2));
l、 添加(新的BigDecimal(3));
l、 添加(新的BigDecimal(4));
l、 添加(新的BigDecimal(5));
l、 添加(新的BigDecimal(6));
l、 添加(新的BigDecimal(7));
List findPattern=拆分列表(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));
import java.math.BigDecimal
列表l=新的ArrayList();
l、 添加(新的BigDecimal(1));
l、 添加(新的BigDecimal(2));
l、 添加(新的BigDecimal(3));
l、 添加(新的BigDecimal(4));
l、 添加(新的BigDecimal(5));
l、 添加(新的BigDecimal(6));
l、 添加(新的BigDecimal(7));
List findPattern=拆分列表(l,5,新的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()); 
}
int-mismatch=len-(alist.size()%len);
对于(int i=0;i<不匹配;++i)
alist.add(中性);
公共静态列表拆分列表(最终列表列表、最终整数列、T中性){
int mismatch=len-(alist.size()%len);
对于(int i=0;ii%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
->List findPattern=splitlist(l,5,新的BigDecimal(0));
|初始值为[[1,2,3,4,5],[6,7,0,0,0]]的类型列表的已修改变量findPattern
|更新重写变量findPattern
(如果您想知道奇妙的输出,请在jshell中进行测试。)


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

我用12个元素的列表测试了这段代码。下面是我得到的输出。[1,2,3,4,5,6,7,8,9,10,11,12]--子列表[1,2,3,4,5],[6,7,8,9,10],[11,12]但我希望输出为
拆分列表中的子列表[1,2,3,4,5],[6,7,8,9,10],[11,12,0,0,0],检查最后一个
列表的大小。如果最后一个较小的大小小于5,请添加大约0的右侧。请您举个例子,因为当我尝试这样做时,它不再接受bigdecimal列表。。。我只想将该方法保留为泛型列表,这样如果可以在该代码中执行某些操作,将很有帮助。我不知道如果不将
t
转换为
BigDecimal
,如何得到零。假设传递对象零将无效。@Sedrick可通过反射进行操作。返回新列表的函数可能不需要改变原始列表,可能需要先复制到新列表?@rpg711:不是必需的。来电者的问题,请提供副本。或者改变方法,复制一份。然而,这不是问题的范围,而是与之正交的如果你需要,复印一份。另一种方法是修复原始函数的输出。解决方案不起作用。请注意,我需要传递一个bigdecimal列表here@user3378550当前位置如果你改变问题,难怪解决方案不起作用。它适合我,在jshell中测试。你有什么错误?