2

指定されたageがある場合、特定のリストから人の名前を出力するメソッドがあります。このメソッドは、命令型の次に関数型のアプローチを使用して実装されます。

public static void printPerson(int age) {
    for(Person p: list) {
        if(p.age == age) {
            System.out.println(p.name)
        }
    }
}

機能的アプローチ:

public static void printPerson(int age) {
    list.stream()
        .filter(p -> p.age == age)
        .forEach(p -> System.out.println(p.name));
}

問題は、読みやすさの他に、これら 2 つのアプローチを他にどのように比較できるか、およびこれらの各属性の評価がどうなるかです。たとえば、メモリ フットプリントが大きいもの、オーバーヘッドが最小のもの、応答時間が長いものなどです。他にどのような属性 (つまり、機能以外の要件) について説明できますか?

4

2 に答える 2

0

Java では、関数型アプローチのパフォーマンスが実装によって大きく異なることに答えるのは難しいです。

しかし、一般に、関数型パラダイムを使用すると、副作用を取り除き、関数が正しいことを行うことを (数学的な方法で) 簡単に証明できます。

純粋なパフォーマンス (特に応答時間) に関しては、関数型が命令型パラダイムよりも高速であるとは思いません。重要なのは次のとおりです。

  • 実装方法
  • 言語 (および Java では JVM) の実装方法。

少なくとも、Java で関数型パラダイムを使用することはお勧めしません。lamdba 式は、この言語ではまだ若いです。あなたがそれを好まない限り。

于 2015-07-13T21:46:53.983 に答える