Akıştaki dizine erişirken bir akış üzerinde yineleme yapmanın özlü bir yolu var mı?
String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};
List<String> nameList;
Stream<Integer> indices = intRange(1, names.length).boxed();
nameList = zip(indices, stream(names), SimpleEntry::new)
.filter(e -> e.getValue().length() <= e.getKey())
.map(Entry::getValue)
.collect(toList());
orada verilen LINQ örneğine kıyasla oldukça hayal kırıklığı yaratıyor gibi görünüyor
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
Daha özlü bir yol var mı?
Ayrıca zip ya taşınmış ya da kaldırılmış gibi görünüyor ...
IntStream.rangeClosed(x, y)
.
List<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
zip
adlandırılan deneysel iki değerli akışlarla birlikte kaldırıldı . Asıl sorun, bunu etkili bir şekilde yapmak için Java'nın gerçekten yapısal olarak yazılmış bir çift (veya demet) tipine ihtiyacı olmasıdır. Bir tanesinden yoksun, genel bir Pair veya Tuple sınıfı oluşturmak kolaydır - birçok kez yapılır - ancak hepsi aynı türden silinir. BiStream
MapStream
intRange()
? Şimdiye kadar Java 8'de bu yöntemin karşısına çıkmadım.