私はこの質問のタイトルをどのように表現するのか本当に分かりませんでした。ダブルループで条件付きチェックを効率的に実行するにはどうすればよいですか?
要素のリストに対して反復処理を行い、特定の条件に基づいて、その要素を新しいリストに追加したいとしましょう。
ここでは、アイテムが最初のリスト(2番目のリストには存在しない)に排他的かどうかを基本的にチェックしたいメソッドを作成します。今私は、この特定の愚かたとえば、あなたがセットを使用してこの問題を解決することができることを知っているが、私はちょうどこのようなものは、私が唯一の現在のItem i
を追加したいので、ここで
public List<Item> newItems(List<Item> items, List<Item> otherItems) {
List<Item> newItems = new ArrayList<>();
for (Item i: items) {
for (Item j: otherItems) {
if (i.equals(j))
//Missing code
}
newItems.add(i);
}
return newItems;
}
をポップアップしまう場合を説明しようとしていますotherItems
の1つの項目と等しくない場合はnewItems
になります。私の最初のインパルスは、//Missing Code
と書かれているbreak;
ですが、それは最初のループから抜けるだけで、i
からnewItems
への追加を妨げません。
ブール変数を使用してifステートメントの真偽を常にチェックし、2番目のループの最後にある真理値に基づいてItem i
をnewItems
に追加するという正しい解決方法を知っています。これは次のようになります:
for (Item i: items) {
boolean check = true;
for (Item j: otherItems) {
if (i.equals(j))
check = false;
break; //To avoid unnecessary iterations
}
if (check)
newItems.add(i);
}
これは非常に嵩張っていてもかなり冗長です。これを行うより効率的でエレガントな方法がありますか?
はソートされたリストですか? – AchmadJP
@AchmadJPこれはArrayListなので、各要素はリスト内の別個の位置にあります。 –