java.util.Compratorインターフェースを見てください。List を反復処理し、コンパレータを使用して探しているものを見つけるメソッドを作成できます。
次のようなもの(コンパイルされていません):
for(final T value : list)
{
if(comparator.compare(value, desired) == 0)
{
// match
}
}
コンパレーターでは、必要な比較を実行します。
これが実際の例です:
public class JavaApplication4
{
public static void main(String[] args)
{
final List<Data> list;
final List<Data> a;
final List<Data> b;
list = new ArrayList<Data>();
list.add(new Data("Foo", 1));
list.add(new Data("Bar", 10));
list.add(new Data("Car", 10));
a = find(list,
new Data("Bar", 0),
new Comparator<Data>()
{
@Override
public int compare(final Data o1,
final Data o2)
{
return (o1.name.compareTo(o2.name));
}
});
b = find(list,
new Data(null, 10),
new Comparator<Data>()
{
@Override
public int compare(final Data o1,
final Data o2)
{
return (o1.count - o2.count);
}
});
System.out.println(a.size());
System.out.println(b.size());
}
private static List<Data> find(final List<Data> list,
final Data desired,
final Comparator<Data> comprator)
{
final List<Data> results;
results = new ArrayList(list.size());
for(final Data data : list)
{
if(comprator.compare(desired, data) == 0)
{
results.add(data);
}
}
return (results);
}
private static class Data
{
private final String name;
private final int count;
Data(final String nm,
final int c)
{
name = nm;
count = c;
}
}
}
そして、これがfind
メソッドの一般的なバージョンです。このメソッドを使用すると、find メソッドを再度記述する必要はありません。反復コードにマッチングのロジックを埋め込むメソッドを使用すると、マッチング ロジックの新しいセットごとに反復ロジックを書き直す必要があります。
private static <T> List<T> find(final List<T> list,
final T desired,
final Comparator<T> comprator)
{
final List<T> results;
results = new ArrayList(list.size());
for(final T value : list)
{
if(comprator.compare(desired, value) == 0)
{
results.add(value);
}
}
return (results);
}