如何从多个 csv 文件中获取 id 和 foreign id
How to get an id and foreign id from multiple csv files
您好,我正在尝试从多个 csv 文件中获取用户 id
列和 foreign_id
列。循环后 (if (userAId.equals(userBId))
) 找不到匹配的 id ...我之前尝试过下面的代码,但没有成功。有什么好的建议吗?
public List<User> getObjectFiles(List<Map<String, String>>> csvFiles) {
List<User> user = new ArrayList<>();
List<Map<String, String>> userARows = csvFiles.get("userARows");
List<Map<String, String>> userBRows = csvFiles.get("userBRows");
List<String> userAId = new ArrayList<>();
for (Map<String, String> userARow: userARows) {
userAId = userARow.entry.stream()
.filter(key->key.getKey().equals("id")
.map(Map.Entry::getValue)
.collect(Collectors.toList());
}
List<String> userBId = new ArrayList<>();
for (Map<String, String> userBRow: userBRows) {
userBId = userBRow.entry.stream()
.filter(key->key.getKey().equals("foreign_id")
.map(Map.Entry::getValue)
.collect(Collectors.toList());
}
if (userAId.equals(userBId)) {
//....more code to add for List<User> user
}
return user;
}
基本上不清楚你在这里问什么。
查看附加代码:
循环的内容,你在地图上流式传输的地方很奇怪:
您迭代地图的所有条目而不是使用简单的“获取”,此外您总是重写值而不是累加它.
为什么不只是:
List<String> userAId = new ArrayList<>();
for (Map<String, String> userARow: userARows) {
String userId = userARow.get("id");
userAIDs.add(userId);
}
这又可以重写为流:
List<String> userAIds = userARows
.stream()
.map(row -> row.get("id"))
.collect(Collectors.asList());
用户 B 的代码看起来完全一样,实际上您甚至可以将其提取到私有方法中以避免相同的代码重复,但它是主观的:
private List<String> calculateByFieldName(List<Map<String, String>> content, String fieldName) {
return content.stream()
.map(row -> row.get(fieldName))
.collect(Collectors.asList());
}
// Then your code becomes:
public List<User> getObjectFiles(List<Map<String, String>>> csvFiles) {
List<User> user = new ArrayList<>();
List<Map<String, String>> userARows = csvFiles.get("userARows");
List<Map<String, String>> userBRows = csvFiles.get("userBRows");
List<String> userAId = calculateByFieldName(userARows, "id");
List<String> userBId = calculateByFieldName(userBRows, "foreign_id");
if (userAId.equals(userBId)) {
//....more code to add for List<User> user
}
return user;
}
无论如何,不清楚“搜索停止”是什么意思 - 显然如果列表不相等(具有相同的内容和元素顺序)程序将不会进入“if”条件并且你会到达最后一行。
您好,我正在尝试从多个 csv 文件中获取用户 id
列和 foreign_id
列。循环后 (if (userAId.equals(userBId))
) 找不到匹配的 id ...我之前尝试过下面的代码,但没有成功。有什么好的建议吗?
public List<User> getObjectFiles(List<Map<String, String>>> csvFiles) {
List<User> user = new ArrayList<>();
List<Map<String, String>> userARows = csvFiles.get("userARows");
List<Map<String, String>> userBRows = csvFiles.get("userBRows");
List<String> userAId = new ArrayList<>();
for (Map<String, String> userARow: userARows) {
userAId = userARow.entry.stream()
.filter(key->key.getKey().equals("id")
.map(Map.Entry::getValue)
.collect(Collectors.toList());
}
List<String> userBId = new ArrayList<>();
for (Map<String, String> userBRow: userBRows) {
userBId = userBRow.entry.stream()
.filter(key->key.getKey().equals("foreign_id")
.map(Map.Entry::getValue)
.collect(Collectors.toList());
}
if (userAId.equals(userBId)) {
//....more code to add for List<User> user
}
return user;
}
基本上不清楚你在这里问什么。
查看附加代码:
循环的内容,你在地图上流式传输的地方很奇怪:
您迭代地图的所有条目而不是使用简单的“获取”,此外您总是重写值而不是累加它.
为什么不只是:
List<String> userAId = new ArrayList<>();
for (Map<String, String> userARow: userARows) {
String userId = userARow.get("id");
userAIDs.add(userId);
}
这又可以重写为流:
List<String> userAIds = userARows
.stream()
.map(row -> row.get("id"))
.collect(Collectors.asList());
用户 B 的代码看起来完全一样,实际上您甚至可以将其提取到私有方法中以避免相同的代码重复,但它是主观的:
private List<String> calculateByFieldName(List<Map<String, String>> content, String fieldName) {
return content.stream()
.map(row -> row.get(fieldName))
.collect(Collectors.asList());
}
// Then your code becomes:
public List<User> getObjectFiles(List<Map<String, String>>> csvFiles) {
List<User> user = new ArrayList<>();
List<Map<String, String>> userARows = csvFiles.get("userARows");
List<Map<String, String>> userBRows = csvFiles.get("userBRows");
List<String> userAId = calculateByFieldName(userARows, "id");
List<String> userBId = calculateByFieldName(userBRows, "foreign_id");
if (userAId.equals(userBId)) {
//....more code to add for List<User> user
}
return user;
}
无论如何,不清楚“搜索停止”是什么意思 - 显然如果列表不相等(具有相同的内容和元素顺序)程序将不会进入“if”条件并且你会到达最后一行。