StackUtils.java

  1. package com.gh.mygreen.xlsmapper.util;

  2. import java.util.LinkedList;

  3. import com.github.mygreen.cellformatter.lang.ArgUtils;


  4. /**
  5.  * {@link LinkedList}に対するユーティリティクラス。
  6.  * @since 1.0
  7.  * @author T.TSUCHIE
  8.  *
  9.  */
  10. public class StackUtils {
  11.    
  12.     /**
  13.      * スタックの最後の要素(一番下の要素)が引数で指定した文字列と等しいかどうか比較する。
  14.      * @param stack
  15.      * @param str 比較対象の文字列
  16.      * @return
  17.      */
  18.     public static boolean equalsBottomElement(final LinkedList<String> stack, final String str) {
  19.        
  20.         if(stack.isEmpty()) {
  21.             return false;
  22.         }
  23.        
  24.         return stack.peekLast().equals(str);
  25.        
  26.     }
  27.    
  28.     /**
  29.      *  スタックの最後の要素(一番下の要素)が引数で指定した文字列の何れかと等しいかどうか比較する。
  30.      * @param stack
  31.      * @param strs
  32.      * @return
  33.      */
  34.     public static boolean equalsAnyBottomElement(final LinkedList<String> stack, final String[] strs) {
  35.        
  36.         ArgUtils.notNull(stack, "stack");
  37.         ArgUtils.notEmpty(strs, "strs");
  38.        
  39.         if(stack.isEmpty()) {
  40.             return false;
  41.         }
  42.        
  43.         final String bottom = stack.peekLast();
  44.         for(String str : strs) {
  45.             if(str.equals(bottom)) {
  46.                 return true;
  47.             }
  48.         }
  49.        
  50.         return false;
  51.        
  52.     }
  53.    
  54.     /**
  55.      * スタックの先頭の要素(一番上の要素)が引数で指定した文字列と等しいかどうか比較する。
  56.      * @param stack
  57.      * @param str 比較対象の文字列
  58.      * @return
  59.      */
  60.     public static  boolean equalsTopElement(final LinkedList<String> stack, final String str) {
  61.        
  62.         if(stack.isEmpty()) {
  63.             return false;
  64.         }
  65.        
  66.         return stack.peekFirst().equals(str);
  67.        
  68.     }
  69.    
  70.     /**
  71.      * スタックの先頭の要素(一番上の要素)が引数で指定した文字列の何れかと等しいかどうか比較する。
  72.      * @param stack
  73.      * @param strs 比較する文字列の配列
  74.      * @return
  75.      */
  76.     public static boolean equalsAnyTopElement(final LinkedList<String> stack, final String[] strs) {
  77.        
  78.         ArgUtils.notNull(stack, "stack");
  79.         ArgUtils.notEmpty(strs, "strs");
  80.        
  81.         if(stack.isEmpty()) {
  82.             return false;
  83.         }
  84.        
  85.         final String top = stack.peekFirst();
  86.         for(String str : strs) {
  87.             if(str.equals(top)) {
  88.                 return true;
  89.             }
  90.         }
  91.        
  92.         return false;
  93.        
  94.     }
  95.    
  96.     /**
  97.      * スタックの値を取り出し、文字列として結合する。
  98.      * @param stack
  99.      * @return
  100.      */
  101.     public static String popupAndConcat(final LinkedList<String> stack) {
  102.        
  103.         StringBuilder value = new StringBuilder();
  104.        
  105.         while(!stack.isEmpty()) {
  106.             value.append(stack.pollLast());
  107.         }
  108.        
  109.         return value.toString();
  110.        
  111.     }
  112.    
  113.     /**
  114.      * スタックから先頭の値を取り出す。
  115.      * @param stack
  116.      * @return スタックが空の場合は空文字を返す。
  117.      */
  118.     public static String popup(final LinkedList<String> stack) {
  119.        
  120.         if(stack.isEmpty()) {
  121.             return "";
  122.         }
  123.        
  124.         return stack.pollFirst();
  125.     }
  126.    
  127. }