6 Kasım 2018 Salı

BinaryOperator Arayüzü

Giriş
BinaryFunction arayüzünden kalıtır.

constructor - lambda
Örnek
Şöyle yaparız.
// result = operation.apply(a, b);
int result = ((BinaryOperator<Integer>) ((a, b) -> a * b)).apply(2, 2);
apply metodu
Örnek
Şöyle yaparız.
BinaryOperator<Integer> otherMethod = ...;
int a = 6;
int b = 7;

int c = otherMethod.apply(a,b);
maxBy metodu
İki nesnenin en büyük olanını döner.

Örnek - En Büyük Olanı Çoklu Alana Göre Seçme
Şöyle yaparız. Burada BinaryOperator.maxBy() kullanımı önemli. Eğer getID() aynıysa önce getDate() en büyük olan seçilir. getDate() aynıysa  getWeightedNumber() en büyük olan seçilir.
return new ArrayList<MyEntity>(
    Stream.concat(listOne.stream(), listTwo.stream())
          .collect(Collectors.toMap(MyEntity::getId, Function.identity(),
                   BinaryOperator.maxBy(Comparator.comparing(MyEntity::getDate)
                                          .thenComparing(MyEntity::getWeightedNumber))))
          .values());
Örnek
Elimizde listInfo listesi olsun. Bu listeyi önce bir tarihten küçüklüğe göre sırayalıp aralarından en büyük değeri seçmek için şöyle yaparız.
List<Info> listResult = Stream.concat(
    listInfo.stream()
        .filter(info -> info.getDate().getTime() < date.getTime())
        .collect(Collectors.toMap(Info::getGroupId, Function.identity(),
            BinaryOperator.maxBy(Comparator.comparing(Info::getDate))))
        .values().stream(),
    listInfo.stream()
        .filter(info -> info.getDate().getTime() >= date.getTime())
    )
    .collect(Collectors.toList());

Hiç yorum yok:

Yorum Gönder