Creating a list with repeating element

后端 未结 5 519
一生所求
一生所求 2020-12-29 01:00

Is there an utility method in Java that generates a list or array of a specified length with all elements equal to a specified value (e.g [\"foo\", \"foo\", \"foo\", \"foo\"

相关标签:
5条回答
  • 2020-12-29 01:07

    Using IntStream, you can generate a range of integers, map them to the element you want and collect it as a list.

    List<String> list = IntStream.rangeClosed(0, 5)
                .mapToObj(i -> "foo")
                .collect(Collectors.toList());
    

    Or, as an array

     String[] arr = IntStream.rangeClosed(0, 5)
                .mapToObj(i -> "foo")
                .toArray(String[]::new);
    
    0 讨论(0)
  • 2020-12-29 01:15

    For an array you can use Arrays.fill(Object[] a, Object val)

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

    and if you need a list, just use

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

    Then I have to use two lines: String[] strArray = new String[5]; Arrays.fill(strArray, "foo");. Is there a one-line solution?

    You can use Collections.nCopies(5, "foo") as a one-line solution to get a list :

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

    or combine it with toArray to get an array.

    String[] strArray = Collections.nCopies(5, "foo").toArray(new String[5]);
    
    0 讨论(0)
  • 2020-12-29 01:32

    You can use Collections.nCopies. Note that this copies the reference to the given object, not the object itself. If you're working with strings, it won't matter because they're immutable anyway.

    List<String> list = Collections.nCopies(5, "foo");
    System.out.println(list);
    
    [foo, foo, foo, foo, foo]
    
    0 讨论(0)
  • 2020-12-29 01:32

    Version you can use for primitive arrays(Java 8):

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

    Note that it returns double[], not Double[]

    Works for IntegerStream, DoubleStream, LongStream

    UPD

    and for string dups you can use:

    Stream.generate(() -> "value").limit(400).toArray()

    No extra libs required, single line

    0 讨论(0)
  • 2020-12-29 01:33

    If your object are not immutable or not reference-transparent, you can use

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

    and collect it to list

    .collect(Collectors.toList())
    

    or to array

    .toArray(YourClass[]::new)
    
    0 讨论(0)
提交回复
热议问题