Каждый виджет имеет функцию «после», то есть он может вызывать другую функцию по истечении заданного периода времени. Итак, что вы хотите сделать, это вызов:
root.after( 1000, blink )
Если вы хотите, чтобы это был повторный вызов, просто вызовите «after» снова внутри вашей функции blink. Единственная проблема, с которой вы столкнетесь, - это передать аргументы для мигания - возможно, посмотрите на использование lamda внутри «after» для этого.
Простым (но не самым эффективным) решением было бы использование потоков 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);
}
}