Java:generic

StartUp.java
package test;

/*
 * startup class
 */
public class StartUp {
	// mainメソッドがプログラムの起動時に実行される
	public static void main(String[] args){
		// 画面を表示
		MainFrame mainFrame = new MainFrame();
		mainFrame.setVisible(true);
	}
}


MainFrame.java
package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

/*
 * main frame class
 */
public class MainFrame extends JFrame {

	private static final long serialVersionUID = 1L;

	/*
	 * main frame
	 */
	public MainFrame() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		setSize(400, 300);

		setTitle("てすと");

		setLocationRelativeTo(null);

		List<String> list = new ArrayList<String>();
		list.add("あさ");
		list.add("あい");
		list.add("うえ");
		// 自作クラスPredicateのListをフィルタするWhereメソッドで条件に合う項目を抽出
		List<String> result = (List<String>) Predicate.Where(list,
				new IPredicate<String>() {

					@Override
					public boolean Calc(String obj) {
						return obj.startsWith("あ");
					}
				});

		// ダイアログにメッセージを表示
		// 自作クラスPredicateのListを結合するJoinメソッドで項目を結合
		JOptionPane.showConfirmDialog(this, Predicate.Join(",", result), "確認",
				JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE);
	}
}

IPredicate.java
package test;

// genericを実装したインターフェース
// classの場合も同じように記述可能
public [[interface]] IPredicate<T> {
	boolean Calc(T obj);
}

Predicate.java
package test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public final class Predicate {
	// genericを実装したstaticメソッド
	// predicateの条件を満たす項目をtargetから抽出して返却
	public static <T> Collection<T> Where(Collection<T> target,
			IPredicate<T> predicate) {
		Collection<T> retVal = new ArrayList<T>();
		for (T item : target) {
			if (predicate.Calc(item)) {
				retVal.add(item);
			}
		}
		return retVal;
	}

	// target同士の間にseparatorを挟んで結合したものを返却
	public static <T> String Join(String separator, Collection<T> target) {
		StringBuilder sb = new StringBuilder();
		if (target != null) {
			Iterator<T> iterator = target.iterator();
			if (iterator.hasNext()) {
				sb.append(iterator.next().toString());
				while (iterator.hasNext()) {
					sb.append(separator + iterator.next().toString());
				}
			}
		}
		return sb.toString();
	}
}
最終更新:2014年02月06日 23:35
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。