Ale*_*mov 1 java collections arraylist 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; i++){
someObjectList.add(someObject);
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了许多不同的解决方案来完成当前的任
这个变体几乎就是我想要的,但是有一个对象的自动生成,但我需要使用一次创建的相同对象.
这个解决方案也几乎是我需要的,但我不确定这个对象的复制,返回的List类型不是 ArrayList(它返回了CopiesList类型,在将来的操作中无法添加到ArrayList).
ps也许它可能重复,但我真的找不到使用Stream API执行此操作的正确和简短的方法.
更新(assylias添加):
是的,我同意你的观点:
List<SomeObject> list = Collections.nCopies(70, someObject);
Run Code Online (Sandbox Code Playgroud)
但是,当我打开这个方法时:
public static <T> List<T> nCopies(int n, T o) {
if (n < 0)
throw new IllegalArgumentException("List length = " + n);
return new CopiesList<>(n, o);
}
Run Code Online (Sandbox Code Playgroud)
正如我们所见 - 它返回CopiesList对象,而不是ArrayList.另外,作为其他列表,它正在扩展AbstractList:
private static class CopiesList<E>
extends AbstractList<E>
implements RandomAccess, Serializable
{
private static final long serialVersionUID = 2739099268398711800L;
final int n;
final E element;
CopiesList(int n, E e) {
assert n >= 0;
this.n = n;
element = e;
}
...}
Run Code Online (Sandbox Code Playgroud)
这不是ArrayList,但感谢您的建议和建议,没有空话和偏离主题的评论,我将使用您的解决方案.
您可以手动构建流:
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));
Run Code Online (Sandbox Code Playgroud)
虽然为此目的创建一个流可能效率低下,但我可能会选择@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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1838 次 |
| 最近记录: |