2016-08-09 6 views
5

私はちょうどJava Runnableについて学び始めたばかりで、Callableについて聞いたことがあります。しかし、私はこの問題を非常に苦労しています。私は引数として関数を取るメソッドを作るつもりです(coolNewFunction(() -> otherFunction(), 100)または同様の簡単な方法で関数を呼び出すことができれば、CallableRunnable、またはそれ以外のものであってもかまいません)。 otherFunctionの戻り値の配列を返します。別の与えられた関数のxとyの値を生成するメソッドを作る

coolNewFunction(() -> square(), 100) 

そして、これは(すなわち{{1, 1}, {2, 4}, {3, 9}...})最初の100の番号とその四角形の配列を返します:たとえば、私は、その後の線に沿って何かを行うことができます機能

public static int square(int x){ 

    return x * x; 

} 

を定義したと言います。今すぐバットをオフに私はsquareは値を渡さなければならないので、lambda() -> square()が動作しないことを知っています。私はsquareの次の引数を持つ100 Runnableの配列を作成しますが、まだ方法run()は何も返しません。 長いストーリーは短いので、異なるx値でsquareのような引数として与えられた別の関数を評価し、その評価の配列を返すメソッドの外観はどうでしょうか?また、新しいスレッドを開始したくないのですが、これが達成できる唯一の方法であれば問題ありません。最後に、私はsquare(または他の)関数を特別な方法(好ましくは)で実装する必要はありません。

答えて

1

希望はこのことができます:

public int[][] fn2Array(Function<Integer, Integer> fn, int x) { 
    int[][] result = new int[x][2]; 
    for (int i; i < x; i++) { 
     result[i][0]=i+1; 
     result[i][1]=fn.apply(i+1); 
    } 
    return result; 
} 
+2

'Function 'の代わりに 'IntUnaryOperator'を考慮すると、不必要なボクシングを避けることができます。 – Tunaki

2

私はArrayを使用していない場合は、あなたが気にしないことを望むが、私はあなたのsquare方法

public Map<Integer, Integer> lotsOfSquares(int limit) { 

    return IntStream.rangeClosed(1,limit)       // Creates a stream of 1, 2, 3, ... limit 
        .boxed()          // Boxes int to Integer. 
        .collect(Collectors.toMap(i -> i,    // Collects the numbers, i->i generates the map key 
               i -> square(i)); // Generates the map value 
} 

を使用します。これは、あなたに{1=1, 2=4, 3=9, ... , 99=9801, 100=10000}を含むマップを提供します。

おそらくlimitにバリデーションを追加してください。

アップデート: - あなたが乗に飽きた場合に今

public <T> Map<Integer, T> lotsOfResults(int limit, Function<Integer, T> f) { 

    return IntStream.rangeClosed(1,limit)       
        .boxed()          
        .collect(Collectors.toMap(i -> i,    
               i -> f.apply(i));  
} 

、あなたはTfの戻り値の型であることをlotsOfResults(100, i -> square(i))

注意を呼び出すことができます。

+0

私は、引数として渡す平方したいと思います。ここで私がどのような方法を使っているのかを変えなければならないたびに(罪、コスなどのようなものに)、どうして私は議論として正方形を持っていますか? –

関連する問題