Javaの8 - オブジェクトとプリミティブラッパーでストリーム

Dharmvir Tiwariさん:

私は、java 8ストリームでの作業とforEachの端末操作でオブジェクトの内容を変更しようとしています。

私はここに直面しています問題は、私は変更することが可能だということであるList<Employee>オブジェクトの内容をが、の内容を変更することはできませんList<Integer>

次のようにコードスニペットは、次のとおりです。

public static void streamExample() {

    List<Employee> listEmp = Arrays.asList(new Employee());
    listEmp.stream().forEach(a -> a.setEmptName("John Doe"));
    listEmp.stream().forEach(System.out::println);
    List<Integer> listInteger = Arrays.asList(2, 4, 6, 8, 12,17, 1234);
    listInteger.stream().filter(v -> v % 2 == 0).forEach(a -> a=a+1);
    listInteger.stream().forEach(System.out::println);

}

私は変更が原因で実行しながら、Integerオブジェクトをボックス化解除のリストに戻って反映されていない疑問に思ってa=a+1ではなく、必ず運転を。

oleg.cherednik:

あなたは、最適なアプローチを使用していませんStream各ステップの思いStreamの変更が存在するとして(または新規作成)要素をバックにそれを返しますStream最後に、受信final結果を、あなたはのいずれかを使用することができfinalファイナライズする方法を(そして実際に全体の流れ作業を実行します)Stream

List<Integer> listInteger = Arrays.asList(2, 4, 6, 8, 12, 17, 1234);
listInteger.stream().filter(v -> v % 2 == 0).forEach(a -> a = a + 1);
listInteger.stream().forEach(System.out::println);

ここでは、初期の配列を持っています。あなたは、次の操作を実行します:

  1. いくつかの要素(これはないフィルタリングfinalステップ)。
  2. (これはフィルタ要素をプリントアウトfinalステップ)。

そのためには、あなたが作成する必要はありませんStreams2回。使用のいずれかを実行します。

Stream.of(2, 4, 6, 8, 12, 17, 1234)    // create stream (there're many way to do it)
      .filter(v -> v % 2 == 0)         // filter out required elements
      .map(v -> v + 1)                 // transform elements using given rule
      .forEach(System.out::println);   // finalize stream with printing out each element separately

注: Stream.of(...)作成しStream、その後、我々はストリームに2つのステップを追加filterし、mapその後、及びfinalizeまたはSTARTがでストリームを作成しましたforEach

おすすめ

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