SQL 处于 Java 状态
SQL IN condition in Java
我有多个条件要检查,如下所示,
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 Implementation
}
有没有简单的方法来检查类似SQL IN
条件的上述条件,让代码看起来更简单?
让我们来看看 SQL in
的特点
SQL WHERE IN
returns values that match values in a list
所以我会使用一个集合,它实现了 Collection<E>
and had contains 方法,使 if
语句更简单。
contains(Object o) Returns true if this set contains the specified element.
contains
效果与SQLin
.
非常相似
1.add 你在集合中的多个条件,从 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");
2.using contains
检查集合中是否存在输入值。
if (dict.contains(pouch.getStatus()))
{
// do your logic
}
List<String> listOfInputs = new ArrayList<String>();
// add elements in listOfInputs...
boolean isAvailable = listOfInputs.contains(pouch.getStatus());
您可以创建自定义函数:
static boolean inCondition(String var, String... ins) {
for (String in : ins) {
if (in.equals(var)) return true;
}
return false;
}
然后这样使用:
public static void main(String[] args) {
String pouch = "Ready";
if (inCondition(pouch, "Finalized", "Ready", "Checkout" ... )) {
// do something
}
}
以下代码段可能对您有所帮助。
String status = "COMPLETED";
List<String> statusList = new ArrayList<>(Arrays.asList("COMPLETED","INPROGRESS"));
if(statusList.contains(status)){
// do your stuff
}
我认为如果你使用 "switch" 条件,代码读起来会更好:
switch (pouch.getStatus()) {
case "Finalized":
case "Ready":
case "Checkout":
case "Confirmed":
case "Book":
case "Started":
case "Inital":
case "Close":
// your code
break;
}
您可以使用 matches
方法 String
class,
if(pouch.getStatus().matches("Finalized|Ready|Checkout|Confirmed|Book|Started|Inital|Close")){
//your implementation goes here
}
SQL IN
可能 return 多个结果,但在您的问题中,如果满足一个条件,操作将终止并且 return.
您可以创建一个枚举来保存您的所有条件,如下所示。
假设您的小袋 class 是这个。
public class Pouch {
private final String status;
public Pouch(final String status) {
this.status = status;
}
public String getStatus() {
return status;
}
}
这是您的邮袋状态枚举。
public enum PouchEnum {
Finalized, Ready, Checkout, Confirmed, Book, Started, Inital, Close
}
并检查您的情况,如下所示。
if (PouchEnum.valueOf(pouch.getStatus()) != null) {
// Do some stuff
}
为了让它更干净,你可以使用来自 apache commons-lang3 的 EnumUtils,这会让你的代码检查更干净,如下所示。
if (EnumUtils.isValidEnum(PouchEnum.class, pouch.getStatus())) {
// Do some stuff
}
我希望这能帮助您的代码更简洁。
对于这个特定的场景,我认为它是一个很好的候选 enum
像这样:
public enum PouchStatus {
FINALIZED, READY, CHECKOUT, CONFIRMED, BOOK, STARTED, INITIAL, CLOSE
}
用法:
if(PouchStatus.valueOf(pouch.getStatus().toUpperCase()) != null) {
}
您还可以将此字符串清理逻辑移动到枚举的静态方法中,如下所示:
public enum PouchStatus {
FINALIZED, READY, CHECKOUT, CONFIRMED, BOOK, STARTED, INITIAL, CLOSE
public static PouchStatus fromDescription(String desc) {
return Arrays.stream(PouchStatus.values()).filter(e -> e.name().equalsIgnoreCase(desc)).findFirst().orElse(null);
}
}
用法:
if (PouchStatus.fromDescription(pouch.getStatus()) != null) {
}
最后一点,如果 Pouch
对象来自 ORM(例如:hibernate/jpa),您可以将这些值映射到实体映射中相应的枚举元素(pouc.getStatus() 已经 return 一个 PouchStatus 对象而不是一个字符串)。
使用 Arrays.asList
然后使用 contains
可能是最好的方法,至少对我来说是这样。
if(Arrays.asList("Finalized", "Ready", "Checkout", "Confirmed",
"Book", "Started", "Inital", "Close").contains(pouch.getStatus())) {
// Body
}
这里是完整的例子
public class InConditionJava {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] arr = { "Finalized", "Ready", "Checkout" };
checkData(arr);
}
private static void checkData(String[] arr) {
Set<String> names = new HashSet<String>(Arrays.asList(arr));
System.out.println("AS Checkout is there in our arr is should return True>>" + names.contains("Checkout")); // true
System.out.println(names.contains("Book")); // false
}
}
此处已经有很多选项,但您也可以使用 Stream
来完成此任务,前提是您使用的 JDK 版本 >= 8:
String status = pouch.getStatus();
if (Stream.of(
"Finalized",
"Ready",
"Checkout",
"Confirmed",
"Book",
"Started",
"Inital",
"Close")
.anyMatch(status::equals)) {
// Body
}
与 Collection#contains
相比,此方法的缺点是您必须确保 pouch.getStatus()
不为空,否则您将得到 NullPointerException
.
这是另一种在一行中初始化包含所有状态的列表,然后检查列表是否包含给定状态的方法。
// Java 9 way of initializing List with one line
List<String> statuses = List.of("Finalized", "Ready", "Checkout", "Confirmed",
"Book", "Started", "Inital", "Close");
if (statuses.contains(pouch.getStatus())) {
// Body
}
您可以创建一个包含所有状态的数组,然后检查 pouch.getStatus() 是否在该列表中?
public String[] statusArray = new String[]{ "Finalized", "Ready","Checkout","Confirmed", "Book", "Started", "Inital", "Close"};
if( Arrays.asList(statusArray).contains(pouch.getStatus())){
//do something
}
我有多个条件要检查,如下所示,
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 Implementation
}
有没有简单的方法来检查类似SQL IN
条件的上述条件,让代码看起来更简单?
让我们来看看 SQL in
的特点
SQL WHERE
IN
returns values that match values in a list
所以我会使用一个集合,它实现了 Collection<E>
and had contains 方法,使 if
语句更简单。
contains(Object o) Returns true if this set contains the specified element.
contains
效果与SQLin
.
1.add 你在集合中的多个条件,从 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");
2.using contains
检查集合中是否存在输入值。
if (dict.contains(pouch.getStatus()))
{
// do your logic
}
List<String> listOfInputs = new ArrayList<String>();
// add elements in listOfInputs...
boolean isAvailable = listOfInputs.contains(pouch.getStatus());
您可以创建自定义函数:
static boolean inCondition(String var, String... ins) {
for (String in : ins) {
if (in.equals(var)) return true;
}
return false;
}
然后这样使用:
public static void main(String[] args) {
String pouch = "Ready";
if (inCondition(pouch, "Finalized", "Ready", "Checkout" ... )) {
// do something
}
}
以下代码段可能对您有所帮助。
String status = "COMPLETED";
List<String> statusList = new ArrayList<>(Arrays.asList("COMPLETED","INPROGRESS"));
if(statusList.contains(status)){
// do your stuff
}
我认为如果你使用 "switch" 条件,代码读起来会更好:
switch (pouch.getStatus()) {
case "Finalized":
case "Ready":
case "Checkout":
case "Confirmed":
case "Book":
case "Started":
case "Inital":
case "Close":
// your code
break;
}
您可以使用 matches
方法 String
class,
if(pouch.getStatus().matches("Finalized|Ready|Checkout|Confirmed|Book|Started|Inital|Close")){
//your implementation goes here
}
SQL IN
可能 return 多个结果,但在您的问题中,如果满足一个条件,操作将终止并且 return.
您可以创建一个枚举来保存您的所有条件,如下所示。
假设您的小袋 class 是这个。
public class Pouch {
private final String status;
public Pouch(final String status) {
this.status = status;
}
public String getStatus() {
return status;
}
}
这是您的邮袋状态枚举。
public enum PouchEnum {
Finalized, Ready, Checkout, Confirmed, Book, Started, Inital, Close
}
并检查您的情况,如下所示。
if (PouchEnum.valueOf(pouch.getStatus()) != null) {
// Do some stuff
}
为了让它更干净,你可以使用来自 apache commons-lang3 的 EnumUtils,这会让你的代码检查更干净,如下所示。
if (EnumUtils.isValidEnum(PouchEnum.class, pouch.getStatus())) {
// Do some stuff
}
我希望这能帮助您的代码更简洁。
对于这个特定的场景,我认为它是一个很好的候选 enum
像这样:
public enum PouchStatus {
FINALIZED, READY, CHECKOUT, CONFIRMED, BOOK, STARTED, INITIAL, CLOSE
}
用法:
if(PouchStatus.valueOf(pouch.getStatus().toUpperCase()) != null) {
}
您还可以将此字符串清理逻辑移动到枚举的静态方法中,如下所示:
public enum PouchStatus {
FINALIZED, READY, CHECKOUT, CONFIRMED, BOOK, STARTED, INITIAL, CLOSE
public static PouchStatus fromDescription(String desc) {
return Arrays.stream(PouchStatus.values()).filter(e -> e.name().equalsIgnoreCase(desc)).findFirst().orElse(null);
}
}
用法:
if (PouchStatus.fromDescription(pouch.getStatus()) != null) {
}
最后一点,如果 Pouch
对象来自 ORM(例如:hibernate/jpa),您可以将这些值映射到实体映射中相应的枚举元素(pouc.getStatus() 已经 return 一个 PouchStatus 对象而不是一个字符串)。
使用 Arrays.asList
然后使用 contains
可能是最好的方法,至少对我来说是这样。
if(Arrays.asList("Finalized", "Ready", "Checkout", "Confirmed",
"Book", "Started", "Inital", "Close").contains(pouch.getStatus())) {
// Body
}
这里是完整的例子
public class InConditionJava {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] arr = { "Finalized", "Ready", "Checkout" };
checkData(arr);
}
private static void checkData(String[] arr) {
Set<String> names = new HashSet<String>(Arrays.asList(arr));
System.out.println("AS Checkout is there in our arr is should return True>>" + names.contains("Checkout")); // true
System.out.println(names.contains("Book")); // false
}
}
此处已经有很多选项,但您也可以使用 Stream
来完成此任务,前提是您使用的 JDK 版本 >= 8:
String status = pouch.getStatus();
if (Stream.of(
"Finalized",
"Ready",
"Checkout",
"Confirmed",
"Book",
"Started",
"Inital",
"Close")
.anyMatch(status::equals)) {
// Body
}
与 Collection#contains
相比,此方法的缺点是您必须确保 pouch.getStatus()
不为空,否则您将得到 NullPointerException
.
这是另一种在一行中初始化包含所有状态的列表,然后检查列表是否包含给定状态的方法。
// Java 9 way of initializing List with one line
List<String> statuses = List.of("Finalized", "Ready", "Checkout", "Confirmed",
"Book", "Started", "Inital", "Close");
if (statuses.contains(pouch.getStatus())) {
// Body
}
您可以创建一个包含所有状态的数组,然后检查 pouch.getStatus() 是否在该列表中?
public String[] statusArray = new String[]{ "Finalized", "Ready","Checkout","Confirmed", "Book", "Started", "Inital", "Close"};
if( Arrays.asList(statusArray).contains(pouch.getStatus())){
//do something
}