Java'da, tüm öğeleri belirli bir değere eşit olan belirli uzunlukta bir liste veya dizi oluşturan bir yardımcı program yöntemi var mı (örn. ["Foo", "foo", "foo", "foo", "foo"])?
Yanıtlar:
Kullanabilirsiniz Collections.nCopies. Bunun referansı nesnenin kendisine değil verilen nesneye kopyaladığını unutmayın . Dizelerle çalışıyorsanız, bunun önemi olmayacak çünkü zaten değişmezler.
List<String> list = Collections.nCopies(5, "foo");
System.out.println(list);
[foo, foo, foo, foo, foo]
Bir dizi için Arrays.fill (Object [] a, Object val) kullanabilirsiniz.
String[] strArray = new String[10];
Arrays.fill(strArray, "foo");
ve bir listeye ihtiyacınız varsa, sadece
List<String> asList = Arrays.asList(strArray);
Sonra iki satır kullanmalıyım: String [] strArray = new String [5]; Arrays.fill (strArray, "foo") ;. Tek satırlık bir çözüm var mı?
Bir liste almak için Collections.nCopies'i (5, "foo") tek satırlık bir çözüm olarak kullanabilirsiniz:
List<String> strArray = Collections.nCopies(5, "foo");
veya toArraybir dizi elde etmek için onunla birleştirin .
String[] strArray = Collections.nCopies(5, "foo").toArray(new String[5]);
String[] strArray = new String[5]; Arrays.fill(strArray, "foo");. Tek satırlık bir çözüm var mı?
İlkel diziler için kullanabileceğiniz sürüm (Java 8):
DoubleStream.generate(() -> 123.42).limit(777).toArray(); // returns array of 777 123.42 double vals
Döndüğünü unutmayın double[] , değilDouble[]
IntegerStream, DoubleStream, LongStream için çalışır
UPD
ve dize kopyaları için şunları kullanabilirsiniz:
Stream.generate(() -> "value").limit(400).toArray()
Ekstra kitap gerekmez, tek satır
Kullanarak IntStream, bir dizi tamsayı oluşturabilir, bunları istediğiniz öğeye eşleyebilir ve bir liste olarak toplayabilirsiniz.
List<String> list = IntStream.rangeClosed(0, 5)
.mapToObj(i -> "foo")
.collect(Collectors.toList());
Veya bir dizi olarak
String[] arr = IntStream.rangeClosed(0, 5)
.mapToObj(i -> "foo")
.toArray(String[]::new);