代码之家  ›  专栏  ›  技术社区  ›  codea

Java是否有类似SQL的“IN”操作符或函数?[副本]

  •  22
  • codea  · 技术社区  · 14 年前

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

    if(word in stringArray) {
      ...
    }
    

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

    谢谢您!

    11 回复  |  直到 12 年前
        1
  •  23
  •   jjnguy Julien Chastang    14 年前

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

    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[] .

        2
  •  17
  •   demongolem    11 年前

    在SQL中

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

    Arrays.asList("Alice", "Bob", "Carol").contains(x)
    
        3
  •  13
  •   polygenelubricants    14 年前

    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
    

    使用 HashSet contains

    您应该熟悉Java集合框架为您提供了哪些数据结构。它们允许您编写惯用的、可维护的、灵活的代码,并且受许多可用于这些数据结构的强大算法的支持。

        4
  •  7
  •   kgiannakakis    14 年前

    Java没有“in”操作符。

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

    contains

        5
  •  3
  •   gpeche    14 年前

        6
  •  2
  •   Jon B    12 年前
    tabs[j].indexOf("lelamondeestgrand...")!=0
    
        7
  •  2
  •   Alexander Malakhov Rahul R Dhobi    10 年前

    无阵列:

    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);
    
        8
  •  1
  •   Brian    14 年前
    if(myArrayList.contains("hello"))
    {
        // yay
    }
    
        9
  •  1
  •   Fish    14 年前

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

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

        10
  •  0
  •   mdma    14 年前

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

    这样地:

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

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

    最后,如果您正在搜索一个大数组,那么并行搜索可能值得使用 ParallelArray This article 介绍一下。

        11
  •  0
  •   bwawok    14 年前

    请详细说明您的问题,以及您需要检查的内容。有几种不同的方法来做这样的事情。如果你需要继续问A项是否在B组。。使B组成为a组 HashSet ,你可以很快打电话给我。您可以通过几种java方式获得相同的效果,但它们会根据您的数据等而有所不同。