If 조건문에서 String.equals() 문장을 사용중인데 더 줄일 수 있는 메서드라던지 방법이 없을까요?
조회수 4178회
현재 아래와 같이 if 문장을 구성하여서 쓰고 있었습니다. 그런데 "WORDS"라는 단어를 해당 object 들과 특정 단어의 equals 로 비교하고 싶은데 더 간단하게 하는 method 가 있을까요? 물론, 해당 object가 String 타입입니다.물론 ArrayList 에 담아서 list 전체랑 "WORDS" 비교를 하는 방법도 있는것 같은데, 그 외의 특정 메서드라던지 그런 방법은 없을까해서 질문드립니다.
if("WORDS".equals(object1) || "WORDS".equals(object2) || "WORDS".equals(object3) || "WORDS".equals(object4) || "WORDS".equals(object5) || "WORDS".equals(object6) || "WORDS".equals(object7) || "WORDS".equals(object8) || "WORDS".equals(object9) || "WORDS".equals(object10)) {
THEN do Something
}
2 답변
-
JAVA 8을 사용한다면 다음과 같이 람다식으로 간단히 할 수 있을 것 같네요.
import java.util.List; import java.util.Arrays; class CodeRunner{ public static void main(String[] args){ List<String> myList = Arrays.asList("WORD", "ANOHTER", "WORDS"); boolean results = myList.stream().anyMatch(str -> str.equals("WORDS")); System.out.println("Results = " + results); } }
아닌 경우는 anyMatch에 해당하는 함수를 다음과 비슷하게 만들어서 사용하는 게 좋을 것 같네요.
// word가 null인 경우는 여기에서 안다뤘습니다. boolean anyMatch(String word, String... objects) { boolean match = false; for( String object: objects ) { match = match || word.equals(object); } return match; }
혹은...
boolean anyMatch(String word, String... objects) { boolean match = false; for( int i=0; !match && i<objects.length; i++) { match = match || word.equals(objects[i]); } return match; }
-
다음같은 함수를 만들어서 쓰면 원하는 기능을 구현할 수 있겠네요.
자바에서 제공하는 메서드는 제가 아는 한 없는 것 같아요.
/** * @param word * @param caseSensitive * @param datas * @return */ public static boolean equals(String word, boolean caseSensitive, String... datas) { for (String s : datas) { if (!caseSensitive) { if (s.equals(word)) { return true; } } else { if (s.equalsIgnoreCase(word)) { return true; } } } return false; }
사용:
if(equals("WORDS", false, obj1, obj2, obj3)){ // obj1~obj3에는 Array나 쉼표로 나눠 넣으면 되요 //TODO }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력