检查ArrayList是否包含除一个元素之外的任何内容

时间:2014-01-01 03:31:49

标签: java arraylist

检查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吗?

4 个答案:

答案 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");
    }