Java 8-使用流API用相同的对象填充arraylist的正确方法是什么?

Java 8-使用流API用相同的对象填充arraylist的正确方法是什么?,java,arraylist,collections,java-stream,Java,Arraylist,Collections,Java Stream,我对Stream API是新手,我正在寻找更优雅、最短的方法,使用与以下代码等效的Stream API,用相同的对象填充ArrayList: SomeObject someObject = new SomeObject(); List<SomeObject> someObjectList = new ArrayList<>(); int maxLimitValue = 70; //for example for(int i=0; i<=maxLimitValue;

我对Stream API是新手,我正在寻找更优雅、最短的方法,使用与以下代码等效的Stream API,用相同的对象填充ArrayList

SomeObject someObject = new SomeObject();
List<SomeObject> someObjectList = new ArrayList<>();

int maxLimitValue = 70; //for example
for(int i=0; i<=maxLimitValue; i++){
   someObjectList.add(someObject);
}
SomeObject SomeObject=new SomeObject();
List someObjectList=新建ArrayList();
int maxLimitValue=70//例如
对于(int i=0;i=0;
这个,n=n;
元素=e;
}
...}

它不是很ArrayList,但感谢您的建议和建议,没有空话和离题的评论,我将使用您的解决方案。

您基本上可以使用IntStream.range()并使用mapToObj方法将每个int映射到同一个对象,然后将其收集到列表中。

您基本上可以使用IntStream.range()并使用mapToObj方法将每个int映射到同一对象,并将其收集到列表中

您可以手动构建流:

List<SomeObject> list = Stream.generate(() -> someObject).limit(70).collect(toList());
//or if you want to make sure you get an ArrayList:
List<SomeObject> list = Stream.generate(() -> someObject).limit(70).collect(toCollection(ArrayList::new));
List List=Stream.generate(()->someObject).limit(70).collect(toList());
//或者,如果要确保获得ArrayList:
List List=Stream.generate(()->someObject).limit(70).collect(toCollection(ArrayList::new));
尽管仅为此目的创建流可能效率低下,我可能会同意@Eran的建议:

List<SomeObject> list = Collections.nCopies(70, someObject);
//or if you want to make sure you get an ArrayList:
List<SomeObject> list = new ArrayList<> (Collections.nCopies(70, someObject));
List List=Collections.nCopies(70,someObject);
//或者,如果要确保获得ArrayList:
List=newarraylist(Collections.nCopies(70,someObject));

您可以手动构建流:

List<SomeObject> list = Stream.generate(() -> someObject).limit(70).collect(toList());
//or if you want to make sure you get an ArrayList:
List<SomeObject> list = Stream.generate(() -> someObject).limit(70).collect(toCollection(ArrayList::new));
List List=Stream.generate(()->someObject).limit(70).collect(toList());
//或者,如果要确保获得ArrayList:
List List=Stream.generate(()->someObject).limit(70).collect(toCollection(ArrayList::new));
尽管仅为此目的创建流可能效率低下,我可能会同意@Eran的建议:

List<SomeObject> list = Collections.nCopies(70, someObject);
//or if you want to make sure you get an ArrayList:
List<SomeObject> list = new ArrayList<> (Collections.nCopies(70, someObject));
List List=Collections.nCopies(70,someObject);
//或者,如果要确保获得ArrayList:
List=newarraylist(Collections.nCopies(70,someObject));

您发布的第二个链接(
List List=new ArrayList(Collections.nCopies(60,0))
)这正是您所需要的,并且它确实创建了一个
ArrayList
。在同一个对象上存储70次引用有什么意义?注意,这是解决TableView+分页与Hibernate和Spring集成中的一些JavaFX问题的一个大解决方案(仅70是示例)。解释这个问题需要很长时间。您发布的第二个链接(
List=new ArrayList(Collections.nCopies(60,0))
)这正是您所需要的,并且它确实创建了一个
ArrayList
。在同一个对象上存储70次引用有什么意义?注意,这是解决TableView+分页与Hibernate和Spring集成中的一些JavaFX问题的一个大解决方案(仅70是示例)。这是一个很长的时间来解释这个问题。谢谢你的回答,我已经更新了这个问题,也许你可以在这部分添加一些东西?你可以随时编写
新的ArrayList(Collections.nCopies(70,someObject))
但是为什么你想要一个ArrayList?当我试图向这个列表(从nCopies创建的列表)添加另一个列表时(另一个ArrayList)通过方法addAll()-我得到了一个不支持的操作异常,但是如果我将列表从nCopies添加到另一个-all工作正常,所以我认为你是对的-现在这不是重点。谢谢!非常有帮助!注意使用
toList()的流解决方案
收集器碰巧返回一个
ArrayList
,但不能保证它。如果它确实必须是一个
ArrayList
,则必须使用
来收集(ArrayList::new)
。但即使使用流,
Collections.nCopies(70,someObject).stream()
是可能更有效的流源。它相当于
IntStream.range(0,70).mapToObj(i->someObject)
…谢谢你的回答,我已经更新了这个问题,也许你可以添加一些东西到这个部分?你可以随时编写
新的ArrayList(Collections.nCopies(70,someObject))
但为什么需要ArrayList?当我试图通过addAll()方法将另一个列表(另一个ArrayList)添加到此列表(从nCopies创建的列表)时-我得到了一个不支持的操作异常,但如果我将列表从nCopies添加到另一个-一切正常,所以我认为你是对的-现在这不是重点。谢谢!真的很有帮助!请注意使用
toList()的流解决方案
收集器碰巧返回一个
ArrayList
,但不能保证它。如果它确实必须是一个
ArrayList
,则必须使用
来收集(ArrayList::new)
。但即使使用流,
Collections.nCopies(70,someObject).stream()
是可能更有效的流源。它相当于
IntStream.range(0,70).mapToObj(i->someObject)
List<SomeObject> list = Collections.nCopies(70, someObject);
//or if you want to make sure you get an ArrayList:
List<SomeObject> list = new ArrayList<> (Collections.nCopies(70, someObject));