Dokümanlara bakıyorum IntStream
ve bir toArray
yöntem görüyorum , ama doğrudan birList<Integer>
Şüphesiz bir dönüştürmek için bir yol yoktur Stream
a List
?
Dokümanlara bakıyorum IntStream
ve bir toArray
yöntem görüyorum , ama doğrudan birList<Integer>
Şüphesiz bir dönüştürmek için bir yol yoktur Stream
a List
?
Yanıtlar:
IntStream::boxed
IntStream::boxed
Bir döner IntStream
bir içine Stream<Integer>
, sonra hangi yapabilirsiniz collect
bir içine List
:
theIntStream.boxed().collect(Collectors.toList())
boxed
Yöntem dönüştüren int
bir ilkel değerleri IntStream
akımı içine Integer
nesne. Kelimesi "boks" adları int
⬌ Integer
dö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())
.
Collectors
sı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 toLi
hit 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.