1 つの解決策は、Guava を使用して、すべての入札を含むTable
と組み合わせることです。List<Bid>
注: 以下のコードでは、多くの Guava の利点を使用しています。
final List<Bid> allBids = Lists.newArrayList();
final Table<Bid, Bid, Void> conflicts = HashBasedTable.create();
新しい入札を保存するときは、次のことを行います (これは、を返すメソッドがあることを前提としbid
ています)。.items()
Set<Item>
for (final Bid bid: allBids)
if (!Sets.intersection(newBid.items(), bid.items()).isEmpty())
conflicts.put(newBid, bid, null);
allBids.add(newBid);
次に、2 つの入札間の競合を検出する場合:
return table.contains(bid1, bid2) || table.contains(bid2, bid1);
Void
代わりに値をSet<Item>
s に置き換えて、競合するアイテムを保存し、その中に結果を入れることもできますSets.intersection()
。
// Table becomes Table<Bid, Bid, Set<Item>>
Sets.SetView<Item> set;
for (final Bid bid: allBids) {
set = Sets.intersection(newBid.items(), bid.items())
if (!set.isEmpty())
conflicts.put(newBid, bid, set.immutableCopy());
}
allBids.add(newBid);