Java中的SQL IN条件

San*_*adi 16 java collections conditional hashset where-in

我有多个条件要检查,如下所示,

if(pouch.getStatus().equals("Finalized") || pouch.getStatus().equals("Ready") 
  || pouch.getStatus().equals("Checkout") || pouch.getStatus().equals("Confirmed")
  || pouch.getStatus().equals("Book") || pouch.getStatus().equals("Started")
  || pouch.getStatus().equals("Inital") || pouch.getStatus().equals("Close")) {
        // Body
}
Run Code Online (Sandbox Code Playgroud)

是否有任何简单的方法来检查类似SQL IN条件的上述条件,以便代码看起来更简单?

D-S*_*hih 13

我们来看看SQL in功能

SQL WHERE IN返回与列表中的值匹配的值


所以我会使用一个集合,它实现from Collection<E>包含方法,使if语句更简单.

contains(Object o)如果此set包含指定的元素,则返回true.

contains效果与SQL非常相似in.


1.在集合中添加多个条件,从中实现 Collection<E>

Set<String> dict = new HashSet<String>();
dict.add("Finalized");
dict.add("Ready");
dict.add("Checkout");
dict.add("Confirmed");
dict.add("Book");
dict.add("Started");
dict.add("Inital");
dict.add("Close");
Run Code Online (Sandbox Code Playgroud)

2. contains检查输入值是否存在于集合中.

if (dict.contains(pouch.getStatus()))
{
     // do your logic
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*een 6

您可以使用课堂matches上提供的方法String,

if(pouch.getStatus().matches("Finalized|Ready|Checkout|Confirmed|Book|Started|Inital|Close")){
   //your implementation goes here
}
Run Code Online (Sandbox Code Playgroud)


rav*_*aja 5

List<String> listOfInputs = new ArrayList<String>();
// add elements in listOfInputs...  
boolean isAvailable = listOfInputs.contains(pouch.getStatus());
Run Code Online (Sandbox Code Playgroud)


小智 5

SQL IN可能会返回多个结果,但在您的问题中,如果满足一个条件,则操作将终止并返回.

您可以创建一个枚举来保存所有条件,如下所示.

假设您的Pouch类是这样的.

public class Pouch {

    private final String status;

    public Pouch(final String status) {
        this.status = status;
    }

    public String getStatus() {
        return status;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是你的包含状态的枚举.

public enum  PouchEnum {
   Finalized, Ready, Checkout, Confirmed, Book, Started, Inital, Close
}
Run Code Online (Sandbox Code Playgroud)

并检查您的状况,如下所示.

if (PouchEnum.valueOf(pouch.getStatus()) != null) {
        // Do some stuff
}
Run Code Online (Sandbox Code Playgroud)

为了使它更干净,你可以使用apache commons-lang3中的EnumUtils,这样可以使代码检查更加清晰,如下所示.

if (EnumUtils.isValidEnum(PouchEnum.class, pouch.getStatus())) {
        // Do some stuff
}
Run Code Online (Sandbox Code Playgroud)

我希望这将有助于您的代码更清洁.