Как преобразовать двухмерный массив в Set?

Каждый виджет имеет функцию «после», то есть он может вызывать другую функцию по истечении заданного периода времени. Итак, что вы хотите сделать, это вызов:

root.after( 1000, blink )

Если вы хотите, чтобы это был повторный вызов, просто вызовите «after» снова внутри вашей функции blink. Единственная проблема, с которой вы столкнетесь, - это передать аргументы для мигания - возможно, посмотрите на использование lamda внутри «after» для этого.

1
задан m fauzan abdi 17 January 2019 в 06:26
поделиться

1 ответ

Простым (но не самым эффективным) решением было бы использование потоков Java:

Set<Foo> set = Arrays.stream(array)
    .flatMap(Arrays::stream)
    .collect(Collectors.toSet());

Приведенный выше фрагмент кода сначала создает Stream<Foo[]> с оператором Arrays.stream(array).

Затем он сглаживает этот поток в Stream<Foo> со вторым утверждением: .flatMap(Arrays::stream), которое ведет себя так же, как .flatMap(arr -> Arrays.stream(arr)).

Наконец, он создает Set<Foo> из сплющенного потока с .collect(Collectors.toSet()).

Я предлагаю более подробно взглянуть на Java Streaming API, представленный в Java 8. Он может сделать гораздо больше, чем просто отобразить 2d-массив в Set.


Другой подход заключается в использовании 2 вложенных циклов:

Set<Foo> set = new HashSet<>(); // or LinkedHashSet if you need a similar order than the array
for(Foo[] inner : array) {
    for(Foo item : inner) {
        set.add(item);
    }
}
0
ответ дан Lino 17 January 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: