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

Does Java have a “IN” operator or function like SQL?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
if(word in stringArray) {
  ...
}

我知道我可以为此做一个功能,但我只想知道Java是否已经有了这个功能。

谢谢您!


有很多收藏可以让你做类似的事情。例如:

使用Strings时:

2

或与Collections一起:

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

然而,对于简单的String[]没有类似的构造。


Java语言设计得既强大又简单。在语言层中没有Java这样的运算符,但是确实已经编写了库来促进这样的查询。

如果您想知道某个对象是否是某组对象的成员,那么应该使用——还有什么?--一个Set。这些数据结构自然允许这样的查询,更好的是,它们针对这样的查询进行了优化。

您可以很容易地检查给定的字符串是否在Set中,如下所示:

1
2
3
4
5
    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集合框架为您提供的数据结构。它们允许您编写惯用的、可维护的、灵活的代码,并由这些数据结构可用的许多强大算法支持。

也见

  • Java教程/集合框架
    • ListSetQueueMapSortedMapNavigableSet等。
  • 有效Java第二版,项目25:喜欢列表到数组


在SQL中

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

在Java中:

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

Java没有"in"运算符。

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

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


可以为集合使用java. UTI.Cuff.Cub()。如果你有一个非空数组,你可以使用java. U.L.Studio.aslist(数组).Cube()。


没有数组:

1
2
3
4
5
6
7
public static <T> boolean in(T value, T... list) {
    for (T item : list) {
        if (value.equals(item))
            return true;
    }
    return false;
}

用途:

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


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


它首先取决于数组是什么。如果它是一个精确单词数组,则可以将其转换为常规集合并使用contains()方法。如果它是一个句子或短语等的数组,则必须对其进行迭代以进行说明。

最通用的解决方案是如下迭代。

1
2
3
4
5
for(String s : stringArray)
{
  if(s.indexOf(word) > 0) return true;
}
return false;

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


1
2
3
4
if(myArrayList.contains("hello"))
{
    // yay
}

请详细说明您的问题和需要检查的内容。有几种不同的方法可以做这样的事情。如果您需要继续询问项目A是否在B组中。使set b成为哈希集,您可以调用contains非常快。您可以在几个Java ISH方式中得到相同的效果,但是它们会根据您的数据等而变化。


如果对数组进行排序,则可以使用array.binarysearch查找数据。

这样地:

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

如果数组未排序,则commons lang具有arrayutils.indexof方法。

最后,如果你正在搜索一个大的数组,那么并行搜索可能是值得的,使用EJOCX1,1,来自Java See 7中的JSR166,现在可以作为下载。本文作了介绍。