If 조건문에서 String.equals() 문장을 사용중인데 더 줄일 수 있는 메서드라던지 방법이 없을까요?


현재 아래와 같이 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
}
  • 2016년 04월 15일에 작성됨
    툭탁틱틱 류군

조회수 276


2 답변


좋아요
5
싫어요
채택취소하기

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;
} 
  • 2016년 04월 15일에 수정됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.
  • 2016년 04월 15일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 아하 이런식으로 가능하겠군요. 감사합니다. ㅎㅎ StackOverflow 에 짧은 영어로 올렸다가 전달하고자하는 바를 제대로 전달못해서 한창 까였었는데... 한글이라서 묻기도 편하고 답변도 이해가능한 한글로 돌아와서 좋네요. ㅠㅠ 감사합니다.    류군   2016.4.16 16:11     

다음같은 함수를 만들어서 쓰면 원하는 기능을 구현할 수 있겠네요.

자바에서 제공하는 메서드는 제가 아는 한 없는 것 같아요.

/**
 * @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
}
  • 2016년 04월 15일에 작성됨
    Android, iOS, Unity를 합니다

  • 그런 기능의 메서드는 없는것 같군요?! 음.. 그리고 이렇게도 가능하군요~ 감사합니다.    류군   2016.4.16 16:11     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close