10 Ekim 2017 Salı

Java 8 Function Arayüzü

Giriş
Şu satırı dahil ederiz.
import java.util.function.Function;
Tek parametre alan ve sonuç dönen bir metodu temsil eder.

constructor - üye metod
Şöyle yaparız.
public class MethodRefs {
 
  Function<MethodRefs, String> f = MethodRefs::getValue;

  public String getValue() {
    return "4";  }
  ...
}
constructor - static metodu
Şöyle yaparız.
public class MethodRefs {
 
  Function<MethodRefs, String> f = MethodRefs::getValueStatic;

  public static String getValueStatic(MethodRefs smt) {
    return smt.getValue();
  }
  ...
}
identity metodu
Girdi parametresini aynen döner.
Örnek
Şöyle yaparız.
Map<Integer,Foo> myMap = 
    fooList.stream().collect(Collectors.toMap(Foo::getId, Function.identity()));
Örnek
Elimizde bir Foo seti olsun.
Set<Foo> set = ...;
Bu seti Map'e çevirmek istiyoruz. key olarak nesnenin hashCode alanını, value olarak nesnenin kendisini kullanmak istiyoruz. Şöyle yaparız.
Map<Integer, Foo> map = list.stream()
                            .collect(Collectors.toMap(
                                Object::hashCode, 
                                Function.identity()));
Örnek - frequency map
Elimizde sayılar barındıran bir liste olsun.
List<Integer> numbers = ...;
Bu listeyi frekans map'ine çevirmek için şöyle yaparız.
Map<Integer, Long> countFrequencies = numbers.stream()
  .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
Örnek - frequency map
Person sınıfının equals() ve hashCode() metodları olduğunu varsayalım. Şöyle yaparız
List<Person> people = Arrays.asList(new Person("Steve"), new Person("Steve"),
  new Person("Ben"), new Person("Ben"), new Person("Steve"),
  new Person("Steve"));

Map<Person, Long> map = people.stream()
  .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

Hiç yorum yok:

Yorum Gönder