一个衬垫,用于检查元素是否在列表中

问题描述 投票:36回答:8

我一直在使用Java / Python。现在在这种情况下,我想检查元素是否在列表中,并做了什么...

Python说:

if "a" in ["a", "b", "c"]:
    print "It's there!"

java是否为此提供任何一个内联,而不是逐步创建ArrayList / Set或类似的数据结构并向其中添加元素?

谢谢

java
8个回答
83
投票

使用Arrays.asList

if( Arrays.asList("a","b","c").contains("a") )

12
投票

List接口中有一个boolean contains(Object obj)方法。

你应该可以说:

if (list.contains("a")) {
    System.out.println("It's there");
}

根据javadoc

boolean contains(Object o)

Returns true if this list contains the specified element. 
More formally, returns true if and only if this list contains at 
least one element e such that (o==null ? e==null : o.equals(e)).


8
投票

在JDK7中:

if ({"a", "b", "c"}.contains("a")) {

假设Project Coin集合文字项目通过。

编辑:它没有。


3
投票

您可以尝试使用带有分隔符的字符串,该分隔符不会出现在任何元素中。

if ("|a|b|c|".contains("|a|"))

1
投票

您可以使用java.util.Arrays.binarySearch查找数组中的元素或检查其是否存在:

import java.util.Arrays;
...

char[] array = new char[] {'a', 'x', 'm'};
Arrays.sort(array); 
if (Arrays.binarySearch(array, 'm') >= 0) {
    System.out.println("Yes, m is there");
}

请注意,要使binarySearch正常工作,需要对数组进行排序。因此在示例中调用Arrays.sort()。如果您的数据已经排序,则无需执行此操作。因此,如果您需要先对数组进行排序,这不是严格意义上的单线程。不幸的是,Arrays.sort()没有返回对数组的引用 - 因此无法组合sort和binarySearch(即Arrays.binarySearch(Arrays.sort(myArray),key))不起作用)。

如果你能负担额外的分配,使用Arrays.asList()看起来更干净。


0
投票

如果他真的想要一个没有任何收藏的单行,那么他可以有一个:

for(String s:new String[]{"a", "b", "c")) if (s.equals("a")) System.out.println("It's there");

*微笑*

(难道不难看吗?请不要在实际代码中使用它)


0
投票
 public class Itemfound{ 
        public static void main(String args[]){

                if( Arrays.asList("a","b","c").contains("a"){
                      System.out.println("It is here");
         }
    }

}

这就是你要找的。 contains()方法只检查列表中元素的索引。如果索引大于'0',则列表中存在元素。

public boolean contains(Object o) {
return indexOf(o) >= 0;
}

0
投票

我会用:

if (Stream.of("a","b","c").anyMatch("a"::equals)) {
    //Code to execute
};

要么:

Stream.of("a","b","c")
    .filter("a"::equals)
    .findAny()
    .ifPresent(ignore -> /*Code to execute*/);
© www.soinside.com 2019 - 2024. All rights reserved.