Giriş
Dönüşüm metodları intermediate metodlar olarak ta bilinirler. Her intermediate metod yeni bir Stream döndürür.
flatMap metodu
Java 8 Stream flatMap metodu yazısına taşıdım.
flatMapToInt metodu
Stream Collection,Array gibi nesnelerden oluşuyorsa bu nesneleri açarak her elemanını dolaşabilmemizi sağlar. Elimde şöyle bir iki boyutlu dizi olsun.
Metodun içi şöyle. Yeni bir StatelessOp nesnesi döndürdüğü görülebilir.
map genellikle map->filter->collect üçlüsü ile beraber kullanılır.
Eskiden şöyle kodlardık
Map akıllı olduğu için gerekirse girdiyi çağırdığı dönüşüm metoduna geçebilir. Aşağıdaki örnekte new Foo () yerine new Foo (foo) metodu tetiklenir.
Bu metod bir DoubleStream döndürür.
Double'ı double'a dönüştürmek için şöyle yaparız.
String'i double'a dönüştürmek için şöyle yaparız.
Bu metod bir IntStream döndürür.
mapToLong metodu
Bu metod bir LongStream döndürür. Örnek ver.
Dönüşüm metodları intermediate metodlar olarak ta bilinirler. Her intermediate metod yeni bir Stream döndürür.
flatMap metodu
Java 8 Stream flatMap metodu yazısına taşıdım.
flatMapToDouble metodu
Örnek ver
Örnek ver
Stream Collection,Array gibi nesnelerden oluşuyorsa bu nesneleri açarak her elemanını dolaşabilmemizi sağlar. Elimde şöyle bir iki boyutlu dizi olsun.
int[][] matrix = ...;
Her alanı toplamak için şöyle yaparız.
long sum = Arrays.stream(matrix).flatMapToInt(arr -> Arrays.stream(arr)).sum();
flatMapToLong metodu
Örnek ver
Örnek ver
public final <R> Stream<R> map(Function<? super P_OUT, ? extends R> mapper) {
Objects.requireNonNull(mapper);
return new StatelessOp<P_OUT, R>(this, StreamShape.REFERENCE,
StreamOpFlag.NOT_SORTED | StreamOpFlag.NOT_DISTINCT) {
@Override
Sink<P_OUT> opWrapSink(int flags, Sink<R> sink) {
return new Sink.ChainedReference<P_OUT, R>(sink) {
@Override
public void accept(P_OUT u) {
downstream.accept(mapper.apply(u));
}
};
}
};
}
Örnekmap genellikle map->filter->collect üçlüsü ile beraber kullanılır.
Eskiden şöyle kodlardık
List<String> inputStrings = new ArrayList<>(); // say, a list of inputStrings
ArrayList<SomeClass> outputResultStrings = new ArrayList();
for(String anInputString : inputStrings) {
SomeClass someResult = doSomthing(anInputString);
if (someResult != null) {
outputResultStrings.add(someResult);
}
}
Şimdi şöyle kodluyoruz.List<SomeClass> outputResultStrings =
inputStrings.stream()
.map(SomeClass::doSomething)
.filter(Objects::nonNull)
.collect(Collectors.toList());
map içinde exception yakalanabilir.intList = strList.stream()// same with "parallelStream()"
.map(x -> {
try {
return Integer.parseInt(x);
} catch (NumberFormatException nfe) {
System.err.println(nfe.getMessage());
}
return null;
})
.filter(x -> x!= null)
.collect(Collectors.toList());
map ve method referenceMap akıllı olduğu için gerekirse girdiyi çağırdığı dönüşüm metoduna geçebilir. Aşağıdaki örnekte new Foo () yerine new Foo (foo) metodu tetiklenir.
List<Foo> copy(List<Foo> foos) {
return foos.stream().map(Foo::new).collect(Collectors.toList());
}
mapToDoubleBu metod bir DoubleStream döndürür.
Double'ı double'a dönüştürmek için şöyle yaparız.
List<Double> values = ...;
double[] ar = values.stream().mapToDouble(Double::doubleValue).toArray();
Integer'ı double'a dönüştürmek için şöyle yaparız.int n = ...
return IntStream.range(0, n)
.mapToDouble(i -> 8.0/(4*i+1)/(4*i+3))
.sum();
List<String> data = ...
double sum = data.stream()
.mapToDouble(Double::parseDouble)
.sum()
mapToInt metoduBu metod bir IntStream döndürür.
mapToLong metodu
Bu metod bir LongStream döndürür. Örnek ver.
Hiç yorum yok:
Yorum Gönder