[解決済み] ラムダ内部からローカル変数を変更する
2022-04-23 17:56:09
質問
のローカル変数を変更する。
forEach
はコンパイルエラーになります。
通常
int ordinal = 0;
for (Example s : list) {
s.setOrdinal(ordinal);
ordinal++;
}
ラムダと
int ordinal = 0;
list.forEach(s -> {
s.setOrdinal(ordinal);
ordinal++;
});
この問題を解決する方法はありますか?
どのように解決するのですか?
ラッパーを使用する
どんな包みでもいいんです。
と Java 10以上 この構成は非常に簡単に設定できるので、ぜひ使ってみてください。
var wrapper = new Object(){ int ordinal = 0; };
list.forEach(s -> {
s.setOrdinal(wrapper.ordinal++);
});
と
Java 8 以上
のどちらかを使用します。
AtomicInteger
:
AtomicInteger ordinal = new AtomicInteger(0);
list.forEach(s -> {
s.setOrdinal(ordinal.getAndIncrement());
});
...または配列。
int[] ordinal = { 0 };
list.forEach(s -> {
s.setOrdinal(ordinal[0]++);
});
注 並列ストリームを使用する場合は、十分に注意してください。期待した結果にならないかもしれません。その他の解決策としては スチュアートの の方が、より適応的かもしれません。
以外のタイプについては
int
もちろん、これは他のタイプでも有効です。
int
.
例えば Java 10+ :
var wrapper = new Object(){ String value = ""; };
list.forEach(s->{
wrapper.value += "blah";
});
また、もしあなたが
ジャバ8
または
9
の場合、上記と同じような構成になりますが、その際
AtomicReference
...
AtomicReference<String> value = new AtomicReference<>("");
list.forEach(s -> {
value.set(value.get() + s);
});
...または配列。
String[] value = { "" };
list.forEach(s-> {
value[0] += s;
});
関連
-
JQuery DataTable 详解
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] リスト内包とラムダ+フィルタの比較
-
[解決済み] List<T> OrderBy Alphabetical Order(アルファベット順)
-
[解決済み】C++11のラムダ式って何?
-
[解決済み】Java 8 lambda Void 引数
-
[解決済み】Java 8 Lambda関数が例外を投げる?
-
[解決済み】Java 8 プロパティで区別する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
SpringBootApplication を型解決できない。
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
をインスタンス化することができません。
-
Methodのinvokeメソッド実装のJavaリフレクション
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
HttpClientがGZIP形式でない場合の対処法
-
このラインで複数のマーカーを解決する方法
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策