2016-05-28 10 views
1

同じメソッドを3回呼び出すのを避けるにはどうすればよいですか?このような状況では何がベストプラクティスですか?それとも正しい方法ですか?戻り値の型でメソッドを呼び出すJavaのベストプラクティス

リストが空でないことを確認しています。空のリストを印刷したくないので、空ではないことを確認するためにもう一度チェックしています。

public class RegExpTest_1 { 
    public static void main(String[] args) { 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add("item1"); 
     list.add("#item2"); 
     list.add("item3"); 
     list.add("&item4"); 
     list.add("item5"); 

     ArrayList<String> list1 = new ArrayList<String>(); 
     list1.add("item1"); 
     list1.add("item2"); 
     list1.add("item3"); 
     list1.add("item4"); 
     list1.add("item5"); 

     if (StringUtils.isNotEmpty(finditem(list)) || StringUtils.isNotEmpty(finditem(list1))){ // calling method 
      if (StringUtils.isNotEmpty(finditem(list))) {   //calling same method 
       System.out.println("List :\n" + finditem(list)); //calling same method 
      } 
      if (StringUtils.isNotEmpty(finditem(list1))) { 
       System.out.println("List :\n" + finditem(list1)); 
      } 
     } 
    } //main 

    public static String finditem(ArrayList<String> alist){ 
     StringBuilder sb = new StringBuilder(); 
     String re1=".*?"; // Non-greedy match on filler 
     String re2="(^#|^&)"; // Word 1 
     Pattern p = Pattern.compile(re1+re2,Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 

     for (String str:alist) { 
      Matcher m = p.matcher(str); 
      if (m.find()) { 
       // System.out.println("found" + m.group(1)); 
       sb.append(str); 
       sb.append("\n"); 
      } else { 
       // System.out.print("not found"); 
      } 
     } 

     return sb.toString(); 
    } 
} 
+0

戻り値が次の呼び出しを変更しない限り、変数に値をアースします。 – HopefullyHelpful

答えて

2

外側のif文は冗長です。 2つの内部if文を使用してください。

例えば

if (StringUtils.isNotEmpty(finditem(list))) {   //calling same method 
     System.out.println("List :\n" + finditem(list)); //calling same method 

    } 
    if (StringUtils.isNotEmpty(finditem(list1))) { 
     System.out.println("List :\n" + finditem(list1)); 
    } 
+1

変数を '' ''に初期化してから次の行の変数に代入するのは冗長です。 – khelwood

+0

@khelwoodええ、if文がより良くなる前にtemp varに代入を割り当てると、入力引数のチェックを追加する方が良いでしょう。 –

0

あなたはこの構造を使用することができます。

if (StringUtils.isNotEmpty(finditem(list))) { 
    System.out.println("List :\n" + finditem(list)); 

} 
if (StringUtils.isNotEmpty(finditem(list1))) { 
    System.out.println("List :\n" + finditem(list1)); 
} 

私は冗長である '場合' 外部と思います。

+0

私は本当にリストを使って私に自動メールを送りたい。だから私は2つの電子メールを送信しないように外側の 'if'を追加しました。 –

0

は、Java 8を使用している場合、それは本当に簡単な実装です。これを変更し、あなたが望むようちょうどStream.of

  1. 内でそれらを追加することによって、できるだけ多くのリストを追加することが利点であなたがすることによってStringにリスト地図
  2. 内finditemsしたいリストからのストリームを作成します
  3. 文字列が空であるかどうかをチェックします。ストリームパイプラインを続行しません。
  4. 返された文字列が空でない場合のみコンソールに出力します。

Stream.of(list, list1) 
     .map(RegExpTest_1::finditem) 
     .filter(x -> !x.isEmpty()) 
     .forEach(items -> System.out.println("List : \n" + items)); 
0

あなたの目標は、より多くの、より良いあなたのFindItem関数方法を変更し、より優れた構造とパフォーマンスのために、あなたの呼び出し方法を調整することがあるので、非空のリストの内容をプリントアウトすることです。

public class RegExpTest_1 { 

public static void main(String[] args) { 


    ArrayList<String> list = new ArrayList<String>(); 
    list.add("item1"); 
    list.add("#item2"); 
    list.add("item3"); 
    list.add("&item4"); 
    list.add("item5"); 

    ArrayList<String> list1 = new ArrayList<String>(); 
    list1.add("item1"); 
    list1.add("item2"); 
    list1.add("item3"); 
    list1.add("item4"); 
    list1.add("item5"); 

    /* 
    if (StringUtils.isNotEmpty(finditem(list)) || StringUtils.isNotEmpty(finditem(list1))) { // calling method 
     if (StringUtils.isNotEmpty(finditem(list))) {   //calling same method 
      System.out.println("List :\n" + finditem(list)); //calling same method 

     } 
     if (StringUtils.isNotEmpty(finditem(list1))) { 
      System.out.println("List :\n" + finditem(list1)); 
     } 
    } 
    */ 

    final String s = finditem(list); 
    if (StringUtils.isNotEmpty(s)) { 
     System.out.println("List :\n" + s); 
    } 

    final String s1 = finditem(list1); 
    if (StringUtils.isNotEmpty(s1)) { 
     System.out.println("List :\n" + s1); 
    } 


} //main 

public static String finditem(ArrayList<String> alist) { 
    // Returns empty string directly if alist is null or empty 
    if (null == alist || 0 == alist.size()) { 
     return ""; 
    } 

    StringBuilder sb = new StringBuilder(); 
    String re1 = ".*?"; // Non-greedy match on filler 
    String re2 = "(^#|^&)"; // Word 1 
    Pattern p = Pattern.compile(re1 + re2, Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 

    for (String str : alist) { 

     Matcher m = p.matcher(str); 
     if (m.find()) { 
      // System.out.println("found" + m.group(1)); 
      sb.append(str); 
      sb.append("\n"); 
     } else { 
      // System.out.print("not found"); 
     } 
    } 

    return sb.toString(); 
} 

final static class StringUtils { 
    // Do your StringUtils.isNotEmpty's do :) 
    public static boolean isNotEmpty(final String s) { 
     return (s != null && s.length() > 0); 
    } 
} 
} 
関連する問題