3 Ocak 2019 Perşembe

IntStream Arayüzü

Giriş
Şu satırı dahil ederiz.
import java.util.stream.IntStream;
Stream<T> arayüzünden kalıtır. Kendine özel metodları da mevcuttur.

IntStream Yaratma

1. Bir başka Stream'in mapToInt() metodu kullanılarak yaratılabilir.

Örnek
Şöyle yaparız.
Stream<String> original=...
int sum=original.mapToInt(String::length).sum();
Örnek
Şöyle yaparız
List<String> list = new ArrayList<>();
list.add("00657");
list.add("00632");
list.add("00656");
list.add("01125");

int maxNum = list.stream()
        .mapToInt(Integer::parseInt)
        .max()
        .orElse(-1);
2. IntSream Yaratma yazısındaki metodlar kullanılabilir.

asLongStream metodu
Örnek
Şöyle yaparız
int[] id = {12,345,566,33};
LongStream longStream = IntStream.of(id).asLongStream();
average metodu
Açıklaması şöyle.
A Stream<T> has no average() method, since the element type T can be any reference type, which doesn't necessarily have a meaning for calculation of the average of the Stream elements.

On the other hand, an IntStream has an average() method, since it has int elements, for which the average operation is well defined.
SummaryStatistics yazısına taşıdım.

boxed metodu
Stream<Integer> nesnesi döner.
Örnek
Şöyle yaparız
List<Integer> result = IntStream
  .rangeClosed(1, 10)
  .boxed().
  collect(Collectors.toList());
collect metodu
İmzası şöyle. Yani Collector alamaz
<R> R collect(Supplier<R> supplier,
              ObjIntConsumer<R> accumulator,
              BiConsumer<R, R> combiner)
Şu kod derlenmez.
private Map<String, Object> collectArguments() {
  ... 
  return IntStream.range(0, args.length)
        .collect(Collectors.toMap(...));
}
boxed() metodu ile normal Stream sınıfın çevirmek için şöyle yaparız.
return IntStream.range(0, args.length)
                .boxed()
                .collect(Collectors.toMap(...));
Bu collect metodunu kullanmak için şöyle yaparız.
return IntStream.range(0, args.length)
                .collect(HashMap::new,
                         (m,i)->m.put(argNames[i],args[i]),
                         Map::putAll);
findFirst metodu
OptionalInt nesnesi döner
Örnek
Şöyle yaparız.
int result = IntStream
    .range(100, 10000)
    .filter(i -> ...)
    .findFirst()
    .getAsInt();
generate metodu
IntSream Yaratma yazısına taşıdım.

iterate metodu - initial element + predicate
IntSream Yaratma yazısına taşıdım.

iterate metodu - initial element + has next predicate + next element
IntSream Yaratma yazısına taşıdım.

map metodu
int döner. Açıklaması şöyle
map of IntStream can only map an int value to another int value. It accepts an IntUnaryOperator (which accepts an int and returns an int) as the mapper function, and returns an IntStream.
Örnek
Aslında bu kod skip(), limit() gibi bir çok metod için de örnek olabilir.
System.out.println(Arrays.toString(
IntStream.rangeClosed(1, 20).skip(9).limit(10).map((new IntUnaryOperator() {
        @Override
        public int applyAsInt(int operand) {
            return operand - 1;
        }
}).andThen(new IntUnaryOperator() {
        @Override
        public int applyAsInt(int operand) {
            return operand * 2;
        }
})).toArray()));
mapToDouble metodu
Şöyle yaparız.
double[] sequence = IntStream.range(200000, 400000)
  .mapToDouble( i -> i * 0.001).toArray();
mapToInt metodu
int döner
Örnek
Şöyle yaparız
int[] result1 = result
  .stream()
  .mapToInt(a -> a)
  .toArray();
mapToObj metodu
int tipini başka bir tipe cast etmek için kullanılır.
Örnek
Şöyle yaparız
var s = IntStream.rangeClosed(1,5).mapToObj(String::valueOf).collect(Collectors.toList());
Örnek
Şöyle bir listemiz olsun.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
Bu listeyi stream'e çevirirsek IntStream elde ederiz. int tipini Int'e çevirmek için de mapToObj kullanmamız gerekir. Örnek
String commaSeparatedNumbers = Arrays.stream(numbers)
    .mapToObj(i -> ((Integer) i).toString()) //i is an int, not an Integer
    .collect(Collectors.joining(", "));
max/min/sum metodu
Örnek
Şöyle yaparız
OptionalInt max = IntStream.of(1, 2, 3, 4, 5).max();
System.out.println(max.getAsInt());

OptionalInt min = IntStream.of(1, 2, 3, 4, 5).min();
System.out.println(max.getAsInt());

int sum = IntStream.of(1, 2, 3, 4, 5).sum();
System.out.println(sum);
range metodu
IntSream Yaratma yazısına taşıdım.

rangeClosed metodu
IntSream Yaratma yazısına taşıdım.

of metodu
IntSream Yaratma yazısına taşıdım.

sorted metodu
Açıklaması şöyle.
Returns a stream consisting of the elements of this stream in sorted order.
Stream sınıfı gibi comparator almaz. Şöyle yaparız.
Arrays.stream(intArray)
      .mapToInt(x->x)
      .sorted()
      .toArray();
toArray metodu
Şöyle yaparız.
int[] arr = IntStream.range(0, 10).map(i -> i*2).toArray();



Hiç yorum yok:

Yorum Gönder