【问题标题】:Using JAVA 8 want reduce code for given for each loop logic [closed]使用 JAVA 8 想要减少每个循环逻辑的给定代码 [关闭]
【发布时间】:2022-01-03 17:46:32
【问题描述】:

我正在使用一个对象从 rest API 检索数据,并希望将其复制到另一个 Response java 对象。

目前我已经用普通的java实现了下面

public OrganizationalUnitTeamsList getTeamsDetails() {
        List<OrganizationalUnit> organizationalUnitList = organizationalUnitConnector.getOrganizationalUnit();
        OrganizationalUnitTeamsList teamsListResponse = new OrganizationalUnitTeamsList();
        List<TeamDetails> availableTeamList = new ArrayList<>();
        for (OrganizationalUnit organizationalUnit : organizationalUnitList) {
            TeamDetails teams = new TeamDetails();
            teams.setHierarchyLevel(organizationalUnit.getHierarchyLevel());
            teams.setLocationName(organizationalUnit.getLocationName());
            teams.setName(organizationalUnit.getName());
            teams.setShortName(organizationalUnit.getShortName());
            availableTeamList.add(teams);
        }
        teamsListResponse.setTeams(availableTeamList);
        return teamsListResponse;
    }

我希望以上代码以 JAVA 8 方式转换。

有人可以建议我更高效且代码简洁的方式来实现上述逻辑吗?

提前谢谢你。

【问题讨论】:

  • 这段代码真的有效吗?什么是“组织单位列表”?
  • 将您的软件修复为没有OrganizationalUnitTeamDetails 的重叠,从而无需将信息从一个复制到另一个。
  • 在我的代码中,我只得到响应 pojo 所需的数据,所以它看起来重叠。但是我会尝试重构。谢谢
  • 是的,给定的代码按预期工作,但我想以更有效的方式实现。关于重叠,看起来是因为我试图在响应 DTO 中保留必要的响应数据。

标签: java arraylist collections java-8 java-stream


【解决方案1】:

你可以这样做,

List<TeamDetails> availableTeamList = organizationalUnitList.stream()
   .map(this::convertToTeam)
   .collect(collectors.toList());

然后定义方法convertToTeam,并将创建新团队的逻辑和填充值放在那里,

private TeamDetails convertToTeam(OrganizationalUnit unit){
TeamDetails team = new teamDetails();
// Setters()
return team;
}

它会做完全相同的事情,但它看起来更干净一些,而且取决于你的类在做什么,你可以选择将方法 convertToTeam 移动到它自己的类以分离关注点。

您应该考虑将此类 OrganizationalUnitTeamsList 重命名为 TeamsResponse 之类的名称,这是一个非常规且令人困惑的类名称

【讨论】:

  • 也就是说,如果该对象实际上是一个列表
  • 由于 organizationsUnitList 是一个列表,这段代码应该可以工作,我假设 teamsListResponse 只是一个包含 List 的包装器
  • 是的,但你怎么知道它是一个列表?名称中只有“列表”并不意味着它是一个列表。即使是,它也是一个空的,因为它没有添加任何数据。如果它是一个包装器,它不应该工作。然后它应该用于 (OrganizationalUnit unit: organizationsUnitList.getList())
  • List organizationsUnitList = organizationsUnitConnector.getOrganizationalUnit();此行正在加载列表,我认为您将其与 teamsListResponse 混淆了,这只是 ResponseClass 的命名不佳,因此循环有效,但 OrganizationalUnitTeamsList 不是 Class 的好名称,尤其是当 organizationsUnitList 存在于同一方法中时
  • 你说得对,我忽略了那条线
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2022-11-04
  • 2022-08-02
  • 2013-11-04
  • 2015-03-15
  • 2021-03-18
相关资源
最近更新 更多