Java是否有像SQL一样的“IN”运算符或函数?

时间:2010-08-25 12:49:51

标签: java function

我想知道在Java中是否有办法做这样的事情:

if(word in stringArray) {
  ...
}

我知道我可以为此创建一个函数,但我只是想知道Java是否已经为此做了一些事情。

谢谢!

11 个答案:

答案 0 :(得分:21)

有许多系列可以让你做类似的事情。例如:

使用Strings

String s = "I can has cheezeburger?";
boolean hasCheese = s.contains("cheeze");

Collections

List<String> listOfStrings = new ArrayList<String>();
boolean hasString = listOfStrings.contains(something);

但是,简单的String[]没有类似的构造。

答案 1 :(得分:13)

Java语言设计强大但也很简单。在语言层面上没有Java中的这样的操作符,但是为了方便这样的查询,肯定编写了库。

如果你想知道某个对象是否是某些对象集的成员,那么你应该使用 - 还有什么? - Set而不是数组。这些数据结构自然允许这样的查询,更好的是,它们优化用于此类查询。

您可以轻松检查给定字符串是否在Set<String>中,如下所示:

    String[] arr = { "Alice", "Bob", "Carol" };
    Set<String> names = new HashSet<String>(Arrays.asList(arr));

    System.out.println(names.contains("Alice")); // true
    System.out.println(names.contains("Dean")); // false

使用HashSetcontains是一个固定时间操作。这比通过数组的线性搜索要好得多。

您应该熟悉Java Collections Framework为您提供哪些数据结构。它们允许您编写惯用的,可维护的,灵活的代码,并且可以使用许多适用于这些数据结构的强大算法。

另见

答案 2 :(得分:11)

在SQL中

x in ('Alice', 'Bob', 'Carol')

在Java中:

Arrays.asList("Alice", "Bob", "Carol").contains(x)

答案 3 :(得分:7)

Java没有“in”运算符。

对于数组,您需要迭代它们并查找匹配的项目。

对于列表,您可以使用contains方法。

答案 4 :(得分:3)

您可以将java.util.Collection.contains()用于集合。如果您拥有的是非null数组,则可以使用java.util.Arrays.asList(array).contains()。

答案 5 :(得分:2)

tabs[j].indexOf("lelamondeestgrand...")!=0

答案 6 :(得分:2)

没有数组:

public static <T> boolean in(T value, T... list) {
    for (T item : list) {
        if (value.equals(item))
            return true;
    }
    return false;
}

用法:

int val = 1;
assert in(val, 1,2,3,4);

答案 7 :(得分:1)

if(myArrayList.contains("hello"))
{
    // yay
}

答案 8 :(得分:1)

首先取决于数组是一个数组。如果它是确切单词的数组,则可以将其转换为常规集合并使用contains()方法。如果它是一个句子或短语等数组,你必须迭代它来告诉。

将捕获所有这些的最通用的解决方案是迭代如下。

for(String s : stringArray)
{
  if(s.indexOf(word) > 0) return true;
}
return false;

这将查看数组中的每个字符串,并检查该单词是否包含在其中的任何位置。在第一次出现之后它将返回true。

答案 9 :(得分:0)

如果数组已排序,您可以使用Arrays.binarySearch查找数据。

像这样:

   if (Arrays.binarySearch(stringArray, word)>=0)  {
     // word found in the array.
   }

如果数组未排序,则为commons lang,使用ArrayUtils.indexOf方法。

最后,如果您正在搜索大型数组,那么使用来自JSR166的ParallelArray进行并行搜索可能是值得的 - 来自Java SE 7并且现在可以下载。 This article给出了介绍。

答案 10 :(得分:0)

向我们提供有关您的问题的详细信息,以及您需要检查的内容。有几种不同的方法来做这样的事情。如果您需要继续询问项目A是否在集合B中,请将集合B设为HashSet,并且您可以非常快速地调用包含。您可以通过几种java-ish方式获得相同的效果,但它们会因您的数据等而异。