Gibt es in Java eine Dienstprogrammmethode, die eine Liste oder ein Array mit einer bestimmten Länge generiert, wobei alle Elemente einem bestimmten Wert entsprechen (z. B. ["foo", "foo", "foo", "foo", "foo"])?
82
Sie können verwenden Collections.nCopies
. Beachten Sie, dass dadurch der Verweis auf das angegebene Objekt kopiert wird , nicht auf das Objekt selbst. Wenn Sie mit Zeichenfolgen arbeiten, spielt dies keine Rolle, da sie ohnehin unveränderlich sind.
List<String> list = Collections.nCopies(5, "foo");
System.out.println(list);
[foo, foo, foo, foo, foo]
Für ein Array können Sie Arrays.fill (Object [] a, Object val) verwenden.
String[] strArray = new String[10];
Arrays.fill(strArray, "foo");
und wenn Sie eine Liste benötigen, verwenden Sie einfach
List<String> asList = Arrays.asList(strArray);
Dann muss ich zwei Zeilen verwenden: String [] strArray = new String [5]; Arrays.fill (strArray, "foo");. Gibt es eine einzeilige Lösung?
Sie können Collections.nCopies (5, "foo") als einzeilige Lösung verwenden, um eine Liste zu erhalten:
List<String> strArray = Collections.nCopies(5, "foo");
oder kombinieren Sie es mit toArray
, um ein Array zu erhalten.
String[] strArray = Collections.nCopies(5, "foo").toArray(new String[5]);
String[] strArray = new String[5]; Arrays.fill(strArray, "foo");
. Gibt es eine einzeilige Lösung?Version, die Sie für primitive Arrays verwenden können (Java 8):
DoubleStream.generate(() -> 123.42).limit(777).toArray(); // returns array of 777 123.42 double vals
Beachten Sie
double[]
, dass es nicht zurückgibtDouble[]
Funktioniert für IntegerStream, DoubleStream, LongStream
quelle
Mit
IntStream
können Sie eine Reihe von Ganzzahlen generieren, diese dem gewünschten Element zuordnen und als Liste erfassen.List<String> list = IntStream.rangeClosed(0, 5) .mapToObj(i -> "foo") .collect(Collectors.toList());
Oder als Array
String[] arr = IntStream.rangeClosed(0, 5) .mapToObj(i -> "foo") .toArray(String[]::new);
quelle
Wenn Ihr Objekt nicht unveränderlich oder nicht referenztransparent ist, können Sie verwenden
Stream.generate(YourClass::new).limit(<count>)
und sammle es zur Liste
oder zu Array
.toArray(YourClass[]::new)
quelle