【问题标题】:Java equivalent of database IN [duplicate]Java相当于数据库IN [重复]
【发布时间】:2012-10-29 16:10:40
【问题描述】:

我一直想知道为什么 java 在 SQL/PL-SQL 中没有像“IN”这样的关键字。这是一个非常有用的关键字,有助于一次将值与其他几个值进行比较,而不是用 || 编写丑陋的代码。或冗长的 if-else! JSR 中是否存在此类命题?

PS:我不是在寻找解决方法,但我想知道是否有任何特殊原因导致此功能在 java 中不存在或在不久的将来有任何建议

【问题讨论】:

  • Collection.contains()。这不是你想要的吗?请发布一些您希望看到的示例(伪)代码。
  • 我认为他的意思类似于SELECT * FROM table WHERE value IN ('Foo','Bar'); - 关键是您可以简洁地指定要比较的列表...
  • 这是 Java,不是 Groovy :D,在 groovy 中有一个运算符 "in" :D

标签: java keyword list-literal


【解决方案1】:

我还没有看到任何将其添加到 Java 中的坚定建议。有一个blog post(和another)讨论了添加列表文字的可能性,这将使您使用contains() 大部分时间都在那里 - 这似乎已经针对Java 7进行了讨论,但没有被采用。

更新:看起来列表文字已被推迟到 Java 8 - 例如,请参阅 this article

您可以使用可变参数定义帮助器,而不是使用contains() 和直接数组字面量或列表:

boolean in(Object o, Object... vals)
{
    return Arrays.asList(vals).contains(o);
}

这样你就可以做到:

if (in(x, "a", "b", "c"))
{
    // Do something
}

但与 SQL IN 或 Python 相比,这仍然有点丑陋和冗长:

if x in ['a','b','c']:
    print "yes"

【讨论】:

  • 这是解决方法,最好的解决方法。每次我需要比较时,我都需要创建一个 Arraylist,这不像原生关键字那样容易!
  • 是的;问题不在于缺少 in 关键字,而是数组字面量很冗长,Java 中没有 List 字面量这一事实。
【解决方案2】:

java.util.Collection 有方法 containscontainsAll 可能会完成工作,但很难从你的问题中看出。

【讨论】:

    【解决方案3】:

    但是 Java 可以很容易地连接到数据库(JDBC)。您确实有一个 for-each 构造,尽管它很有帮助并且类似于 IN

    for (Suit suit : suits)
        for (Rank rank : ranks)
            sortedDeck.add(new Card(suit, rank));
    

    【讨论】:

      【解决方案4】:

      在Java中,您可以创建一个集合并使用方法boolean contains(Object o)

      【讨论】:

        【解决方案5】:

        【讨论】:

          【解决方案6】:

          我会做类似的事情,

          List<String> values = ArrayLists.create("AVALUE", "BVALUE");
          
          if (values.contains(yourValue))
          // Do whatever
          

          【讨论】:

          • 这是一种解决方法,不是吗。每次我需要比较时创建一个数组列表看起来像是一种妥协!
          【解决方案7】:

          我想是的,

          这确实是一个缺失的功能。

          例如:

          String[] list = new String[]{"Tim","Tammy","Tod"};
          if("Ted" in list){
              System.out.println("Found!");
          }
          

          真的很容易理解。

          【讨论】:

          • 我猜大多数时候不清楚应该使用运算符 .equals() 或 == 或 .compareTo() 来比较“Tim”和“Ted”。
          • 好吧,如果是智能比较器,它会对字符串值做字符串比较,对非字符串值做非字符串比较!
          • 区分大小写?字符集敏感?修剪?正则表达式?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-02-21
          • 1970-01-01
          • 2016-05-31
          • 2013-11-15
          • 2019-04-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多