StackUtils.java
package com.github.mygreen.messageformatter;
import java.util.Deque;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.NonNull;
/**
* {@link Deque}に対するユーティリティクラス。
*
* @author T.TSUCHIE
*
*/
@NoArgsConstructor(access = AccessLevel.PACKAGE)
public class StackUtils {
/**
* スタックの最後の要素(一番下の要素)が引数で指定した文字列の何れかと等しいかどうか比較する。
* @param stack スタック
* @param strs 比較対象の文字列の配列。
* @return スタックの最後の要素が引数 {@code strs} の何れかと等しいとき {@code true} を返す。
*/
public static boolean equalsAnyBottomElement(
@NonNull final Deque<String> stack, @NonNull final String[] strs) {
if(stack.isEmpty()) {
return false;
}
final String bottom = stack.peekLast();
for(String str : strs) {
if(str.equals(bottom)) {
return true;
}
}
return false;
}
/**
* スタックの先頭の要素(一番上の要素)が引数で指定した文字列と等しいかどうか比較する。
* @param stack スタック
* @param str 比較対象の文字列
* @return スタックの先頭の要素が引数 {@code str} と等しいとき {@code true} を返す。
*/
public static boolean equalsTopElement(final Deque<String> stack, final String str) {
if(stack.isEmpty()) {
return false;
}
return stack.peekFirst().equals(str);
}
/**
* スタックの値を先頭から全て取り出し、文字列として結合する。
* @param stack スタック
* @return スタックの要素を結合した文字列。
*/
public static String popupAndConcat(final Deque<String> stack) {
StringBuilder value = new StringBuilder();
while(!stack.isEmpty()) {
value.append(stack.pollLast());
}
return value.toString();
}
/**
* スタックから先頭の値を取り出す。
* @param stack スタック
* @return スタックが空の場合は空文字を返す。
*/
public static String popup(final Deque<String> stack) {
if(stack.isEmpty()) {
return "";
}
return stack.pollFirst();
}
}