Arrays.asList не сплющивается в Java, что я должен использовать вместо этого?
Привет мне нужно преобразовать SortedSet> в массив целых чисел, но не уверен, как это сделать.
Это SortedSet, который я хочу преобразовать:
private SortedSet<List<Integer>> coords;
и это метод get, который я использую, который показывает как ошибку:
public List<Integer> getCoords() {
return Arrays.asList(coords);
}
Если я хочу сделать что-то вроде этого, должен ли я пройти через весь SortedList и создать новый массив int[] и просто поместить все значения внутри него? Или есть более приятный способ? Я думал, что Arrays.asList может сделать это, но теперь я в замешательстве!
Спасибо за прочтение!
3 ответа
Arrays.asList()
ничего не сгладит!
То, что вы хотите, это:
public List<Integer> getCoords()
{
final List<Integer> ret = new ArrayList<>();
for (final List<Integer> l: coords)
ret.addAll(l);
return ret;
}
С Java 8 одним примером будет:
public List<Integer> getCoords()
{
final List<Integer> ret = new ArrayList<>();
coords.stream().forEach(ret::addAll);
return ret;
}
Есть и другие, более короткие примеры (см. Другие ответы или комментарии к этому ответу).
@fge дает вам решение. Однако, если вы используете Java-8, вы можете использовать совершенно новый потоковый API и вызвать flatMap
(какая операция вы ищете).
public List<Integer> getCoords() {
return coords.stream()
.flatMap(list -> list.stream()) //or .flatMap(List::stream)
.collect(Collectors.toList());
}
Вы хотите сделать массив всех целых чисел во всех списках в вашем отсортированном наборе?
Вам придется перебирать множество и объединять результаты каждого list.toArray();
https://docs.oracle.com/javase/7/docs/api/java/util/Set.html