我检查了以下链接-- Link1 Link2 Link3,但无法解决&因此我发布了帖子。
需要:
两个字符串字段的字符串部分匹配(在所有情况下都不可能完全匹配)&从匹配的行获取信息。数据存储在MySQL db中。
事务数据表包含需要与Scrip表中的公司名称进行比较的说明。我需要从Scrip-Info表中获取公司代码信息,方法是将交易表中的多个单词匹配到Scrip信息表中。
代码:
for (List<String> listData : transactionData) {
List<List<String>> code = scripInfo.stream()
.filter(p -> p.get(1).toUpperCase().contains(listData.get(1).toUpperCase()))
.collect(Collectors.toList());
// Output to console to check if its working
code.forEach(p -> System.out.println(p.get(0)));
//Prepare Output List
List<Object> rowData = new ArrayList<>();
rowData.add(code.get(0));
rowData.add(listData.get(2));
rowData.add(listData.get(3));
.........
}尽管我在上面的代码中使用了“Contains”,但只有在数据完全匹配的情况下,它才会得到数据。因此,从下面的示例数据中,我只找到了CANARA银行,因为它在两个表中都是相同的。
注意事项:数据存储在MySQL db中&提取。
Scrip-信息表
事务数据表
必需的输出:
使用当前代码的输出:
发布于 2017-10-15 06:21:28
你可以玩过滤部分。以下是一个例子,
List<TransactionData> filteredData =
transactionData.stream().filter(t ->
{
List<ScripInfo> filteredScrip =
scripInfo.stream().filter(s -> {
String[] tranTokens =
t.getName().toUpperCase().split(
" |\\.");
String[] scripTokens =
s.getName().toUpperCase().split(" ");
String scripSysmbol =
s.getSymbol().toUpperCase();
if (tranTokens[0].contains(scripTokens[0])) {
return true;
} else if (scripSysmbol.contains(
tranTokens[0])) {
return true;
}
return false;
}).collect(Collectors.toList());
return filteredScrip.size() > 0 ? true : false;
}).collect(Collectors.toList());在我的示例中,类ScripInfo和TransactionData是简单的POJO,
@Data
@AllArgsConstructor
public class ScripInfo {
private String symbol;
private String name;
}
@Data
@AllArgsConstructor
public class TransactionData {
private String name;
private String letter;
private int number;
}https://stackoverflow.com/questions/46742521
复制相似问题