パラメータとしてメソッドに渡す方法

アリウス派:

すべてのdouble値を返すの異なる方法によって返された値に基づいて、クラスの選択上位Nの場合:私は基本的に同じことをやっている方法の束を持っています。

ですから、例えば、次のインターフェイスを実装するクラスのオブジェクトのための:

interface A {
    Double getSalary();
    Double getAge();
    Double getHeight();
}

私は、各メソッドによって返される値の最高でN個のオブジェクトを選択します。

今、私は3つの方法があります:

List<A> getTopItemsBySalary(List<A> elements);
List<A> getTopItemsByAge(List<A> elements);
List<A> getTopItemsByHeight(List<A> elements);

つまり、この身体を持っています:

List<A> getTopItemsBySalary(List<A> elements, int n) {
    return elements.stream()
              .filter(a -> a.getSalary() != null)                 
              .sorted(Comparator.comparingDouble(A::getSalary).reversed())
              .limit(n)
              .collect(Collectors.toList());
}

どのように私はこの方法で渡すことができますし、ただ一つの方法がありますか?

ernest_k:

あなたが使用できるFunctionことを変換AするDoubleように、:

List<A> getTopItems(List<A> elements, Function<A, Double> mapper, int n) {
    return elements.stream()
              .filter(a -> null != mapper.apply(a))                 
              .sorted(Comparator.<A>comparingDouble(a -> mapper.apply(a))
                      .reversed())
              .limit(n)
              .collect(Collectors.toList());
}

そして、あなたは使用してそれを呼び出すことができます。

List<A> top10BySalary = getTopItems(list, A::getSalary, 10);
List<A> top10ByAge = getTopItems(list, A::getAge, 10);

あなたのゲッターは常にnull以外を返すことが期待されている場合は、ToDoubleFunction(あなたの場合は、それはないでしょう仕事使用することをお勧め型でDouble戻り値がnullの場合もあります)。

List<A> getTopItems(List<A> elements, ToDoubleFunction<A> mapper, int n) {
    return elements.stream()
              .sorted(Comparator.comparingDouble(mapper).reversed())
              .limit(n)
              .collect(Collectors.toList());
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=312775&siteId=1