Có phương thức tiện ích nào trong Java tạo danh sách hoặc mảng có độ dài được chỉ định với tất cả các phần tử bằng một giá trị được chỉ định không (ví dụ: ["foo", "foo", "foo", "foo", "foo"])?
Câu trả lời:
Bạn có thể sử dụng Collections.nCopies. Lưu ý rằng điều này sao chép tham chiếu đến đối tượng đã cho, không phải bản thân đối tượng. Nếu bạn đang làm việc với các chuỗi, điều đó sẽ không thành vấn đề vì dù sao thì chúng cũng bất biến.
List<String> list = Collections.nCopies(5, "foo");
System.out.println(list);
[foo, foo, foo, foo, foo]
Đối với một mảng, bạn có thể sử dụng Arrays.fill (Object [] a, Object val)
String[] strArray = new String[10];
Arrays.fill(strArray, "foo");
và nếu bạn cần một danh sách, chỉ cần sử dụng
List<String> asList = Arrays.asList(strArray);
Sau đó, tôi phải sử dụng hai dòng: String [] strArray = new String [5]; Arrays.fill (strArray, "foo") ;. Có một giải pháp một dòng?
Bạn có thể sử dụng Collections.nCopies (5, "foo") như một giải pháp một dòng để lấy danh sách:
List<String> strArray = Collections.nCopies(5, "foo");
hoặc kết hợp nó với toArrayđể có được một mảng.
String[] strArray = Collections.nCopies(5, "foo").toArray(new String[5]);
Bằng cách sử dụng IntStream, bạn có thể tạo một loạt các số nguyên, ánh xạ chúng đến phần tử bạn muốn và thu thập nó dưới dạng danh sách.
List<String> list = IntStream.rangeClosed(0, 5)
.mapToObj(i -> "foo")
.collect(Collectors.toList());
Hoặc, dưới dạng một mảng
String[] arr = IntStream.rangeClosed(0, 5)
.mapToObj(i -> "foo")
.toArray(String[]::new);
String[] strArray = new String[5]; Arrays.fill(strArray, "foo");. Có một giải pháp một dòng?