如何从多个 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”条件并且你会到达最后一行。