どのように私はJavaのIntStreamにネストされた.forEachから結果を収集することができます

djangofan:

私は不可欠の方法を使用していない、Javaのストリームに「二和」を遊んと、この問題を解決しようとしています:

Given nums = [2, 7, 11, 15], target = 18,
Because nums[1] + nums[2] = 7 + 11 = 18,
return [1, 2].

そして、ここに私の部分的に動作するコードです。誰の助けを解決することはできますか?私はちょうどそれがプリミティブint型の配列として返されるバックアップ収集する方法を見つけ出すことはできません。

class Solution { 
    public int[] twoSum(int[] input, int target) {
        IntStream.range(0,  input.length)
           .forEach(i -> {
               IntStream.range(0,  input.length)
                   .filter(j -> i != j && input[i] + input[j] == target)
                   .peek(t -> System.out.println(input[t]))
                   .findFirst();
               }
            );
        return null;
    }
}

そして、ここで(PEEKから来る)上記の出力は、次のとおりです。

11
7
dehasi:

私がコメントで言ったようにストリームは常に完璧なソリューションではありません。あなたはペアの流れを必要とするようにしかし、あなたのタスクについては、それが見えます。残念ながらJavaは、私は簡単な作成することをお勧め理由です(Scalaのような)タプル持っていないPairクラスを。

class Pair {
    int i, j;
    public Pair(int i, int j) {
        this.i = i;
        this.j = j;
    }
}

その後、ペアの流れで作業

 IntStream.range(0,  input.length)
                .boxed()
                .flatMap(i -> IntStream.range(0,  input.length).boxed()
                                .map(j -> new Pair(i,j))
                )
                        .filter(p -> p.i != p.j)
                        .filter(p -> input[p.i] + input[p.j] == target)
                        .collect(toList());

おすすめ

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