2015-05-06 18 views
38

örnek aşağıdaki kod satırını atın: Collectors.toSet() ve HashSet

Set<String> someSet = someColletion.stream().map(p -> p.toString()).collect(Collectors.toSet()); 

Ben HashSet istiyorum. Kodda bir hata ayıklayıcısını alarak, gerçekten bir HashSet alıyorum. Aşağıdaki kodu gözlemlemek java.util.stream.Collectors.toSet() bir göz vardı:

public static <T> Collector<T, ?, Set<T>> toSet() { 
    return new CollectorImpl<>((Supplier<Set<T>>) HashSet::new, Set::add, 
           (left, right) -> { left.addAll(right); return left; }, 
           CH_UNORDERED_ID); 
} 

sözleşme garanti bir Set ve uygulama bir HashSet karar verir; mantıklı görünüyor. Ancak, benim uygulama sadece herhangi bir eski Set değil, bir HashSet tarafından garanti edilen sabit zaman aramasına ihtiyaç duymaktadır. toSet()'un uygulanması, kendi hakları dahilinde olan bir FooSet kullanmaya karar verirse, uygulamam tehlikeye girer.

Bu sorunun en iyi uygulama çözümü nedir?

cevap