在Java中是否有一个实用方法,可以生成指定长度的列表或数组,并使所有元素都等于指定值(例如 ["foo", "foo", "foo", "foo", "foo"])?
答案:Java提供了Arrays类中的静态方法,名为fill(),可以生成包含指定元素并指定长度的数组。例如,要创建一个包含5个元素且每个元素均为字符串"foo"的数组,可以使用以下代码:
String[] array = new String[5];
Arrays.fill(array, "foo");
在Java中是否有一个实用方法,可以生成指定长度的列表或数组,并使所有元素都等于指定值(例如 ["foo", "foo", "foo", "foo", "foo"])?
String[] array = new String[5];
Arrays.fill(array, "foo");
你可以使用Collections.nCopies
。请注意,这将复制给定对象的引用,而不是对象本身。如果您正在使用字符串,则无关紧要,因为它们本身就是不可变的。
List<String> list = Collections.nCopies(5, "foo");
System.out.println(list);
[foo, foo, foo, foo, foo]
String[] strArray = new String[10];
Arrays.fill(strArray, "foo");
如果您需要一个列表,只需使用
List<String> asList = Arrays.asList(strArray);
那我需要使用两行代码:String[] strArray = new String[5]; Arrays.fill(strArray, "foo");。有没有一行代码的解决方案?List<String> strArray = Collections.nCopies(5, "foo");
或者与toArray
结合使用以获取数组。
String[] strArray = Collections.nCopies(5, "foo").toArray(new String[5]);
String[] strArray = new String[5]; Arrays.fill(strArray, "foo");
。有没有一行的解决方案? - laurtStream.generate(YourClass::new).limit(<count>)
并将其收集到列表中
.collect(Collectors.toList())
或转换为数组
.toArray(YourClass[]::new)
您可以在原始数组中使用的版本(Java 8):
DoubleStream.generate(() -> 123.42).limit(777).toArray(); // returns array of 777 123.42 double vals
请注意,它返回double[]
,而不是Double[]
适用于IntegerStream,DoubleStream,LongStream
更新
对于字符串重复,您可以使用:
Stream.generate(() -> "value").limit(400).toArray()
无需额外的库,单行代码
IntStream
,您可以生成一系列整数,将它们映射到您想要的元素并将其收集为列表。List<String> list = IntStream.rangeClosed(0, 5)
.mapToObj(i -> "foo")
.collect(Collectors.toList());
或者,作为一个数组
String[] arr = IntStream.rangeClosed(0, 5)
.mapToObj(i -> "foo")
.toArray(String[]::new);
n = 0
,以下的编程代码也会评估"foo"
。 - darw