2016-01-21 6 views
0

У меня есть следующий код:Объединение коллекций в одном?

Object value = methodOutOfMyControl();   
Collection<LinkedHashSet<String>> values = ((Map) value).values(); 
Set<String> strings = new HashSet<String>(); 
for (LinkedHashSet<String> set : values) { 
    strings.addAll(set); 
} 

Есть ли способ переписать этот код более лаконичный?

P.S. Я использую Java 6

+1

"PS Я использую java 6" Почему? –

+1

Если вам нужно остановиться на Java 6, то этот код в порядке. – Tom

+2

@tobias_k Вопрос к клиенту – gstackoverflow

ответ

3

Это выглядит лучше:

Collection<LinkedHashSet<String>> values = ((Map) userPreferenceValue).values(); 
Set<String> contraValues = Sets.newHashSet(Iterables.concat(values)); 
0

В Java 6 Я бы рекомендовал FluentIterable гуавы в:

Object value = methodOutOfMyControl(); 
Collection<LinkedHashSet<String>> values = ((Map) value).values(); 

//transformAndConcat is similar to Java 8, Stream.flatMap 
final ImmutableSet<String> set = FluentIterable.from(values) 
     .transformAndConcat(Functions.identity()).toSet(); 

Или, если вы действительно хотите это в одной строке:

final ImmutableSet<String> set = FluentIterable.from(
      ((Map<?, LinkedHashSet<String>>) this.methodOutOfMyControl()).values()) 
     .transformAndConcat(Functions.identity()) 
     .toSet(); 
Смежные вопросы