我有两个数组列表。一个数组列表包含外国食品,而另一个数组列表包含本地食品。
保存外国产品的数组列表:capturedForeginProduct
capturedForeginProduct数组列表的示例数据
Ebony Garlic
Tell Tale Elephant Garlic
High Top Garlic
Carrington Lemon Popsicles
保存本地产品的数组列表:capturedLocalProducts
NOAS Garlic Murukku 100g
SMAK Garlic Bites 100g
CIC Chilli & Garlic Sauce 400g
KIST Lemon & Mint Nectar 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 {
}
}
}
这就是我想做的......
Ebony Garlic should match NOAS Garlic Murukku 100g
Tell Tale Elephant Garlic should match SMAK Garlic Bites 100g
还有其他方法可以实现这个目标吗?任何算法都被接受。
最佳答案
您想要查找包含某个单词的所有本地产品,而该单词也包含在至少一种外国产品中。不要迭代产品和单词的每种可能的组合 (O(n^2*length^2)),而是将外国产品中使用的每个单词收集到 HashSet
中,然后对于每个本地产品检查该集合是否包含本地产品中的任何单词。
请注意,您检查匹配的方法不正确:它通过两种不同的方法检查描述是否完全相等,忽略大小写;您必须使用 String.split("")
获取产品中的单词,然后迭代这些单词以检查匹配项。
关于java - 将数组列表中的产品与另一个数组列表中的类似产品进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797943/