如何从多个csv文件中获取id和外来id

nlejzf6q  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(322)

嗨,我正在试着让用户 id 列和 foreign_id 多个csv文件中的列。循环之后( 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;
}
yc0p9oo0

yc0p9oo01#

基本上不清楚你在问什么。
查看所附代码:
循环的内容(在Map上进行流式处理)很奇怪:
您迭代Map的所有条目,而不是使用简单的“get”,此外,您总是重写值,而不是累积值。
为什么不只是:

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;
}

无论如何,它不清楚你所说的“搜索停止”是什么意思-显然,如果列表不相等(具有相同的内容和元素顺序),程序将不会进入“如果”条件,你将到达最后一行。

相关问题