Java 如何将ArrayList的每个元素复制n次?

Java 如何将ArrayList的每个元素复制n次?,java,java-8,Java,Java 8,我必须将ArrayList的每个元素复制n次。我试图通过以下方式做到这一点: List<String> elements = new ArrayList(); elements.add("1"); elements.add("2"); elements.add("3"); List<String> newList = new ArrayList(); for(int i = 0; i < elements.

我必须将ArrayList的每个元素复制n次。我试图通过以下方式做到这一点:

List<String> elements = new ArrayList();
elements.add("1");
elements.add("2");
elements.add("3");
List<String> newList = new ArrayList();
for(int i = 0; i < elements.size(); i++){
        newList = Collections
                .nCopies(10, elements.get(i));
    }
List elements=new ArrayList();
元素。添加(“1”);
元素。添加(“2”);
元素。添加(“3”);
List newList=newarraylist();
对于(int i=0;i

但它只会重复元素列表的最后一个元素10次

您每次都会重新分配
newList=
,并将其添加到同一个元素中。您需要使用
addAll

  • 不要使用原始泛型,
    new ArrayList()-->new ArrayList()
  • 您可以将foreach循环
    用于(字符串元素:元素)

newList
将在每次迭代时重置

每次都必须将项目附加到newList


//设置。。。这里的一切都是一样的,直到后来。。。。
列表元素=新的ArrayList();
元素。添加(“1”);
元素。添加(“2”);
元素。添加(“3”);
List newList=newarraylist();
//迭代(仍然相同)
对于(int i=0;i“newList.addAll(集合…””
//这会将新集合附加到newList,而不是重置它
addAll(Collections.nCopies(10,elements.get(i));
}
System.out.println(“以“+元素开头”);
System.out.println(“以“+newList”结尾);
//输出
以[1,2,3]开头
以:[1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3]结尾

回答很好,内容丰富且简洁-请告诉我……)您可以指定一个最佳初始容量,
newarraylist(elements.size()*10)
。对于流操作,不需要做两个中间操作
.flatMap(elt->Collections.nCopies(10,elt).stream())
就足够了。这看起来像是一个家庭作业。看看您在循环中做了什么,在调试时,请注意newList变量。
List<String> elements = Arrays.asList("1", "2", "3")
List<String> newList  = new ArrayList<>();
for (String element : elements) {
    newList.addAll(Collections.nCopies(10, element));
}

// [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
List<String> newList = elements.stream()
                               .map(elt -> Collections.nCopies(10, elt))
                               .flatMap(List::stream)
                               .collect(Collectors.toList());