Dokümanlara bakıyorum IntStreamve bir toArrayyöntem görüyorum , ama doğrudan birList<Integer>
Şüphesiz bir dönüştürmek için bir yol yoktur Streama List?
Dokümanlara bakıyorum IntStreamve bir toArrayyöntem görüyorum , ama doğrudan birList<Integer>
Şüphesiz bir dönüştürmek için bir yol yoktur Streama List?
Yanıtlar:
IntStream::boxedIntStream::boxedBir döner IntStreambir içine Stream<Integer>, sonra hangi yapabilirsiniz collectbir içine List:
theIntStream.boxed().collect(Collectors.toList())
boxedYöntem dönüştüren intbir ilkel değerleri IntStreamakımı içine Integernesne. Kelimesi "boks" adları int⬌ Integerdönüşüm süreci. Bkz. Oracle Eğitimi .
toList. Bu dosyanın ithalat arasında aşağıdaki yerleştirerek yapılır: static import java.util.stream.Collectors.toList;. Sonra toplama çağrısı sadece okur .collect(toList()).
Collectorssınıfı Tercihler -> Java -> Editör -> İçerik Yardımı -> Sık Kullanılanlar'a ekleyerek yapılır . Bundan sonra , IDE'yi doldurmak ve statik içe aktarmayı eklemek için sadece toLihit Ctr + Space'e yazmanız gerekir toList.
boxed()parçayı işaret ettiğiniz için teşekkür ederim
Ayrıca bir IntFunction alan ve verilen işlevi bu akışın öğelerine uygulama sonuçlarından oluşan nesne değerli bir Akış döndüren bir Stream'de mapToObj () öğesini de kullanabilirsiniz.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed(), delege olan budur.
Eclipse Koleksiyonlarında bulunan ilkel koleksiyonları kullanabilir ve bokstan kaçınabilirsiniz.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Not: Eclipse Koleksiyonlarına katkıda bulunuyorum.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
Koleksiyon yöntemini kullanabilirsiniz:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
Aslında, bir nesne akışında .collect (Collectors.toList ()) öğesini çağırdığınızda Java'nın yaptığı tam olarak budur:
public static <T> Collector<T, ?, List<T>> toList() {
return new Collectors.CollectorImpl(ArrayList::new, List::add, (var0, var1) -> {
var0.addAll(var1);
return var0;
}, CH_ID);
}
Not: Üçüncü parametre yalnızca paralel koleksiyon çalıştırmak istiyorsanız gereklidir; sadece ilk ikisini sağlayan sıralı toplama için yeterli olacaktır.