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

Другие вопросы по тегам