检查arraylist是否包含一个(只有一个)值的最优雅方法是什么?
例如,如何检查我的arraylist
是否仅包含零:
[0,0,0,0]; [0,0,0,0,0]; [0,0,0,0,0,0,0,0]; <-- All should return true.
我知道有很多方法可以做到这一点,包括一个非常基本的for-loop
,但是有一个优雅的,可能是一行的解决方案使用标准的API吗?
答案 0 :(得分:3)
您可以将元素添加到集合中,并使用类似的内容检查大小 -
public static void main(String[] args) {
if (new java.util.HashSet<Integer>(
Arrays.asList(new Integer[] { 0, 0, 0, 0 }))
.size() == 1
&& new java.util.HashSet<Integer>(
Arrays.asList(new Integer[] { 0, 0, 0, 0,
0 })).size() == 1
&& new java.util.HashSet<Integer>(
Arrays.asList(new Integer[] { 0, 0, 0, 0,
0, 0, 0, 0 })).size() == 1) {
System.out.println("All true");
} else {
System.out.println("Not true");
}
}
哪个会输出All true
,除非您向任何Integer[]
添加非零值。
或者,作为通用方法
public static <T> boolean oneValue(java.util.List<T> in) {
// A one-liner.
return (in == null) ? false : new java.util.HashSet<T>(in).size() == 1;
}
确实,这些效率低于简单地循环遍历List
,就像这样 -
public static <T> boolean oneValue(java.util.List<T> in) {
if (in == null)
return false;
T o = in.get(0);
for (int i = 1; i < in.size(); i++)
if (!in.get(i).equals(o))
return false;
return true;
}
答案 1 :(得分:1)
我会推荐以下内容:
public boolean isAllSame(ArrayList<?> list){
Object first=list.get(0);
for(int i=1;i<list.size();i++){
if(!list.get(i).equals(first))return false;
}
return true;
}
(是的,这是一个for循环。但是,正如之前所说,它不是那么不优雅 - 在O(n)最坏情况和O(1)运行最好。只有4行。)
答案 2 :(得分:0)
将所有数组元素放在一个arraylist中,然后将其放入hashset并检查大小。如果size为1则返回/打印为true。
Set<Integer> val= new HashSet<Integer>();
List<Integer> allVal= new ArrayList<Integer>();
allVal.addAll(Arrays.asList(new Integer[] { 0, 0, 0, 0 }));
allVal.addAll(Arrays.asList(new Integer[] { 0, 0, 0, 0,0 }));
allVal.addAll(Arrays.asList(new Integer[] { 0, 0, 0, 0,0, 0, 0, 0 }));
val.addAll(allVal);
if(val.size()==1)
System.out.println("All true");
else
System.out.println("More than 1 element present");
答案 3 :(得分:-1)
你可以试试这个:
List<Integer> lst = Arrays.asList(new Integer[] { 0, 0, 0, 0 });
int temp = Integer.parseInt(lst.toString().replaceAll(", ", "").replaceAll("\\[", "").replaceAll("]", "").trim());
if(temp == 0) {
System.out.println("All zeros");
}