Java是否具有像SQL一样的“IN”运算符或函数?
我想知道在Java中是否有办法做这样的事情:
if(word in stringArray) { ... }
我知道我可以为此创建一个函数,但我只是想知道Java是否已经有了这个function。
谢谢!
有许多集合可以让你做类似的事情。 例如:
使用Strings
:
String s = "I can has cheezeburger?"; boolean hasCheese = s.contains("cheeze");
或与Collections
:
List listOfStrings = new ArrayList (); boolean hasString = listOfStrings.contains(something);
但是,对于简单的String[]
,没有类似的构造。
Java语言设计强大但也很简单。 Java语言级别没有这样的运算符,但是为了方便这样的查询,肯定编写了库。
如果你想知道某个对象是否是某些对象集的成员,那么你应该使用 – 还有什么? – Set
。 这些数据结构自然允许这样的查询,更好的是,它们针对此类查询进行了优化 。
您可以像这样轻松检查给定字符串是否在Set
:
String[] arr = { "Alice", "Bob", "Carol" }; Set names = new HashSet (Arrays.asList(arr)); System.out.println(names.contains("Alice")); // true System.out.println(names.contains("Dean")); // false
使用HashSet
, contains
是一个常量操作。 这比通过数组的线性搜索要好得多。
您应该熟悉Java Collections Framework为您提供的数据结构。 它们允许您编写惯用,可维护,灵活的代码,并支持许多可用于这些数据结构的强大算法。
也可以看看
- Java教程/集合框架
-
List
,Set
,Queue
,Map
,SortedMap
,NavigableSet
等。
-
- Effective Java 2nd Edition,Item 25:首选列表到数组
在SQL中
x in ('Alice', 'Bob', 'Carol')
在Java中:
Arrays.asList("Alice", "Bob", "Carol").contains(x)
Java没有“in”运算符。
对于数组,您需要迭代它们并查找匹配项。
对于列表,您可以使用contains
方法。
您可以将java.util.Collection.contains()用于集合。 如果你拥有的是非null数组,则可以使用java.util.Arrays.asList(array).contains()。
tabs[j].indexOf("lelamondeestgrand...")!=0
没有数组:
public static 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);
if(myArrayList.contains("hello")) { // yay }
它首先取决于数组是一个数组。 如果它是确切单词的数组,您可以将其转换为常规集合并使用contains()方法。 如果它是一个句子或短语等数组,你必须迭代它来告诉。
将捕获所有这些的最通用的解决方案是迭代如下。
for(String s : stringArray) { if(s.indexOf(word) > 0) return true; } return false;
这将查看数组中的每个字符串,并检查该单词是否包含在其中的任何位置。 在第一次出现之后它将返回true。
如果数组已排序,则可以使用Arrays.binarySearch查找数据。
喜欢这个:
if (Arrays.binarySearch(stringArray, word)>=0) { // word found in the array. }
如果数组未排序,则commons lang具有ArrayUtils.indexOf方法。
最后,如果您正在搜索大型数组,那么使用JSR166中的ParallelArray
进行并行搜索可能是值得的 – 来自Java SE 7,现在可以下载。 本文介绍。
向我们提供有关您的问题的详细信息,以及您需要检查的内容。 有几种不同的方法来做这样的事情。 如果您需要继续询问项目A是否在集合B中,请将集合B设置为HashSet ,并且您可以非常快速地调用包含。 您可以通过几种java-ish方式获得相同的效果,但它们会因您的数据等而异。