У вас есть несколько вариантов. Среди наиболее простого будет соответствовать поставщику подстроку, следующим образом:
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
public class GroupVendors {
public static void main(final String[] args) {
final List<String> vendors = Arrays.asList(
"CENTURYLINK",
"SMART",
"ATT",
"A WIRELESS");
final List<String> uncategorizedVendors = Arrays.asList(
"001 CENTURYLINK IREP",
"003 CENTURYLINK MY ACCOUNT",
"003-ClearTalk Wireless",
"004 CENTURYLINK IVR",
"005 CENTURYLINK RECURRING",
"006 CENTURYLINK WIFI",
"007 CENTURYLINK CABLE",
"111 SMART ATT",
"112 SMART ATT",
"113 - SMART - ATT",
"114 SMART ATT",
"120 - SMART - ATT",
"131 - SMART - ATT",
"137 - SMART - ATT",
"A WIRELESS AMERY",
"A WIRELESS ANNA",
"A WIRELESS APTOS",
"A WIRELESS ARCADIA",
"A WIRELESS ARNOLDS PAR",
"A WIRELESS ASHLAND",
"A WIRELESS ATHENS");
final Map<String, List<String>> categorizedVendors = new TreeMap<>();
for (final String vendor : vendors) {
categorizedVendors.put(vendor, new LinkedList<String>());
}
for (final String vendor : uncategorizedVendors) {
for (final Map.Entry<String, List<String>> entry : categorizedVendors.entrySet()) {
final String category = entry.getKey();
if (vendor.contains(category)) {
final List<String> bin = entry.getValue();
bin.add(vendor);
}
}
}
for (final Map.Entry<String, List<String>> entry : categorizedVendors.entrySet()) {
final String category = entry.getKey();
final List<String> bin = entry.getValue();
System.out.printf("vendors(\"%s\") = {%n", category);
if (!bin.isEmpty()) {
System.out.printf(" %s%n",
bin.stream()
.map((vendor) -> String.format("\"%s\"", vendor))
.collect(Collectors.joining(",\n ")));
}
System.out.println("}");
}
}
}
Sample пробег:
% java GroupVendors
vendors("A WIRELESS") = {
"A WIRELESS AMERY",
"A WIRELESS ANNA",
"A WIRELESS APTOS",
"A WIRELESS ARCADIA",
"A WIRELESS ARNOLDS PAR",
"A WIRELESS ASHLAND",
"A WIRELESS ATHENS"
}
vendors("ATT") = {
"111 SMART ATT",
"112 SMART ATT",
"113 - SMART - ATT",
"114 SMART ATT",
"120 - SMART - ATT",
"131 - SMART - ATT",
"137 - SMART - ATT"
}
vendors("CENTURYLINK") = {
"001 CENTURYLINK IREP",
"003 CENTURYLINK MY ACCOUNT",
"004 CENTURYLINK IVR",
"005 CENTURYLINK RECURRING",
"006 CENTURYLINK WIFI",
"007 CENTURYLINK CABLE"
}
vendors("SMART") = {
"111 SMART ATT",
"112 SMART ATT",
"113 - SMART - ATT",
"114 SMART ATT",
"120 - SMART - ATT",
"131 - SMART - ATT",
"137 - SMART - ATT"
}
Я сделал предположение, что список категорий поставщиков вы заинтересованы в том, «CenturyLink» , "SMART", "ATT" и "WIRELESS". Это приводит к категоризации всех записей, содержащих как «SMART», так и «ATT» в обеих ячейках. Если вы хотите, чтобы каждый поставщик классифицировался в одном бункере, вам нужно будет решить, какой поставщик вы предпочитаете, когда категории являются избыточными.