階層をトラバースしていくつかの値を比較する必要があり、一致した瞬間に結果を返す必要があるという問題で立ち往生しています。これが私の完全なユースケースです
私は取得Collection<Categories> categoryList
しています、A Collection<MyCustomObject>
、MyCustomObject{//いくつかのプロパティプライベートカテゴリカテゴリ}
カテゴリのコードをMyCustomObjectの下にあるカテゴリのコードと比較し、最初に一致したMyCustomObjectを返送する必要があります。
この比較では、コレクションiwの階層をトラバースする必要があります。現在のカテゴリに一致するものが見つからない場合は、を呼び出してカテゴリリストを取得してから、
categoryList.getSuperCategories()
上に移動する必要があります。
私は再帰的なメソッド呼び出しを考えていますが、私の場合、ルートまで最初のカテゴリをトラバースし続けているかのように、これは機能していないようです。2番目のカテゴリを追跡できません。
私は何かを試していました(完了していないか、正しく機能していません)
public ProductAllotmentData getProductAllotmnet(final Collection<CategoryModel> categoryModelList)
{
if (CollectionUtils.isNotEmpty(categoryModelList))
{
final List<ProductAllotment> productAllotmentList = getProductAllotmentEntries();
if (CollectionUtils.isNotEmpty(productAllotmentList))
{
for (final CategoryModel model : categoryModelList)
{
for (final ProductAllotmentData productAllotmentData : productAllotmentList)
{
if (model.getCode().equals(productAllotmentData.getAllotmentCategory().getCode()))
{
return ProductAllotmentData;
}
else
{
return getAllotmentForCategory(model.getAllSupercategories(), productAllotmentyData);
}
}
}
}
}
return null;
}
-
public ProductAllotmentData getAllotmentForCategory(final Collection<CategoryModel> categoryModelList,
final ProductAllotmentData productAllotmentaData)
{
ProductAllotmentData allotmentData = null;
for (final CategoryModel model : categoryModelList)
{
if (model.getCode().equals(productAllotmentData.getAllotmentCategory().getCode()))
{
allotmentEntryData = productAllotmentData;
}
else
{
return getAllotmentForCategory(model.getSupercategories(), productAllotmentData);
}
}
return allotmentEntryData;
}
他のオプションは、ある種のスタックを作成し、その中にすべてのカテゴリを配置し、一度に1つずつポップして比較し、スタック内の残りのアイテムを無視して最初の一致を送り返すことですが、はるかに優れたものを探しています。柔軟なソリューション。
問題
各カテゴリの階層をトラバースしてコードを比較する方法がわかりません。 getAllotmentForCategory
カテゴリ階層をトラバースしようとしているところです。
この点での助けは本当に良いです