我有两个数组列表。一个阵列列表包含外国食品,而其他阵列列表包含当地食品。
包含外国产品的数组列表:capturedForeginProduct
capturedForeginProduct 数组列表的示例数据
乌梅大蒜
告诉Tale Elephant Garlic
高顶大蒜
卡林顿柠檬冰棒
包含本地产品的数组列表:capturedLocalProducts
NOAS Garlic Murukku 100g
SMAK大蒜叮咬100克
CIC Chilli&蒜酱400g
KIST Lemon&薄荷花蜜1L
我想列出与国外产品相匹配的本地产品。
我使用以下代码来获取输出。
for (int i = 0; i < capturedForeginProduct.size(); i++) {
for (int j = 0; j < capturedLocalProducts.size(); j++) {
// if(capturedForeginProduct.get(i).contains("Garlic")) {
if (Pattern.compile(Pattern.quote(capturedLocalProducts.get(j)), Pattern.CASE_INSENSITIVE).matcher(capturedForeginProduct.get(i)).find() || capturedLocalProducts.get(j).toLowerCase().contains(capturedForeginProduct.get(i).toLowerCase())) {
log.debug("Matching .. : " + "\t" + capturedForeginProduct.get(i) + "\t" + capturedLocalProducts.get(j));
firstForeignProducts.add(capturedForeginProduct.get(i));
firstLocalProducts.add(capturedLocalProducts.get(j));
}
else {
}
}
}
这就是我想要做的......
乌梅大蒜应该与NOAS大蒜Murukku 100g匹配
告诉Tale Elephant Garlic应该与SMAK Garlic Bites 100g匹配
还有其他方法可以实现这一目标吗?任何算法都被接受。
答案 0 :(得分:0)
你可以创建两个包含这些信息的Enumerations,给出与他们所尊重的食物相关的那些序数值,然后为每个Enumration创建并循环一个ArrayList并匹配信息。
答案 1 :(得分:0)
您想要查找包含至少一个外国产品中包含的单词的所有本地产品。而不是遍历产品和单词的每个可能组合(O(n ^ 2 * length ^ 2)),将外国产品中使用的每个单词收集到HashSet
,然后为每个本地产品检查该集合是否包含本地产品中的任何一个词。
请注意,检查匹配项的方法不正确:它通过两种不同的方法检查描述是否完全相同而忽略大小写;您必须使用String.split(" ")
来获取产品中的字词,然后迭代这些字词以检查匹配项。