私の質問は非常に明確です。
リストがあり、null でない要素が少なくとも 1 つあることを確認したいと考えています。それも、ループなしで (パフォーマンス測定)。
list.size()
ここでは絶対に役に立ちません。リストに 5 つの null 値が含まれている場合、そのサイズも 5 になるためです。
を含むことができないリストを要求しているわけではないことに注意してくださいnull
。
私の質問は非常に明確です。
リストがあり、null でない要素が少なくとも 1 つあることを確認したいと考えています。それも、ループなしで (パフォーマンス測定)。
list.size()
ここでは絶対に役に立ちません。リストに 5 つの null 値が含まれている場合、そのサイズも 5 になるためです。
を含むことができないリストを要求しているわけではないことに注意してくださいnull
。
リストであることだけがわかっている (つまり、 を実装しているList
) オブジェクトを受け取った場合、直接的または間接的にループする他の解決策はありません。
List
インターフェースはそのような機能を提供しておらず、それを提供する一般的に利用可能な実装がないことを私は知っています。
ループするか、ループするメソッドを呼び出す以外に選択肢はありません。
編集:もちろん、リストクラスを自分で書くと、カウンターを持つようにやりたいことができます。
のコピーコンストラクターArrayList
が実際にループしているかどうかはわかりませんが、これはString
私の例を使用してトリックを行います。removeAll
一方、内部的にループします...したがって、実際には「ループしていない」わけではありません...
List<String> testLst = new ArrayList<String>();
testLst.add(null);
testLst.add(null);
testLst.add(null);
testLst.add(null);
List<String> testLst2 = new ArrayList<String>();
testLst2.add(null);
testLst2.add(null);
testLst2.add(null);
testLst2.add(null);
testLst2.add("test");
List<String> nullLst = new ArrayList<String>();
nullLst.add(null);
List<String> removedNull = new ArrayList<String>(testLst);
removedNull.removeAll(nullLst);
if (testLst.size() > 0 && removedNull.size() > 0) {
System.out.println("Contains non-null");
} else {
System.out.println("Contains only null or empty");
}
removedNull = new ArrayList<String>(testLst2);
removedNull.removeAll(nullLst);
if (testLst2.size() > 0 && removedNull.size() > 0) {
System.out.println("Contains non-null");
} else {
System.out.println("Contains only null or empty");
}
Collections.frequency(list, null) > 0