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 답변

  • 좋아요

    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;
    } 
    
    • 아하 이런식으로 가능하겠군요. 감사합니다. ㅎㅎ 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.4.16 16:11

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)