繰り返し要素を含むリストの作成


82

すべての要素が指定された値(["foo"、 "foo"、 "foo"、 "foo"、 "foo"]など)に等しい指定された長さのリストまたは配列を生成するユーティリティメソッドがJavaにありますか?

回答:


144

を使用できますCollections.nCopies。これにより、オブジェクト自体ではなく、指定されたオブジェクトへの参照がコピーされることに注意してください。文字列を使用している場合は、とにかく不変であるため、問題にはなりません。

List<String> list = Collections.nCopies(5, "foo");
System.out.println(list);
[foo、foo、foo、foo、foo]

20

配列の場合、Arrays.fill(Object [] a、Object val)を使用できます。

String[] strArray = new String[10];
Arrays.fill(strArray, "foo");

リストが必要な場合は、

List<String> asList = Arrays.asList(strArray);

次に、2行を使用する必要があります。String[] strArray = new String [5]; Arrays.fill(strArray、 "foo");。ワンラインソリューションはありますか?

リストを取得するための1行のソリューションとしてCollections.nCopies(5、 "foo")を使用できます。

List<String> strArray = Collections.nCopies(5, "foo");

または、それを組み合わせてtoArray配列を取得します。

String[] strArray = Collections.nCopies(5, "foo").toArray(new String[5]);

1
次に、2行を使用する必要がありますString[] strArray = new String[5]; Arrays.fill(strArray, "foo");。ワンラインソリューションはありますか?
2014年

非常に単純です:Collections.nCopies(5、 "foo")Thkns!
マルセロRebouças

4

プリミティブ配列に使用できるバージョン(Java 8):

DoubleStream.generate(() -> 123.42).limit(777).toArray(); // returns array of 777 123.42 double vals

を返すのdouble[]ではなく、Double[]

IntegerStream、DoubleStream、LongStreamで動作します


1

を使用して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);

1

オブジェクトが不変でないか、参照透過性でない場合は、次を使用できます。

Stream.generate(YourClass::new).limit(<count>)

リストに収集します

.collect(Collectors.toList())

または配列する

.toArray(YourClass[]::new)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.