当前位置: 首页 > 知识库问答 >
问题:

在Java中创建一个新的自定义对象vs将同一对象的多个值设置为Null

东郭腾
2023-03-14

所以,我遇到了这样的情况

我有一个Restful控制器方法,它返回一个列表对象match

@RequestMapping(value = "/fetchFootballMatchesToday", method = RequestMethod.GET)
public @ResponseBody List<Match> fetchMatchesScheduledToday() throws ParseException {
    return matchesToday;
   }
List<Match> matchesToday = matchInvService.fetchMatchByDate(today);

for (Match stats : matchesToday) {
 if (stats != null) {
/* user should not know these details, so they are being set to null */
    stats.setMatchSuccessIndex(null);
    stats.setTeamRanking(null);
    stats.setStadiumInfrastructureLevel(null); 
    ..... & so on
  }
}
List<Match> matchesToday = matchInvService.fetchMatchByDate(today);
List<Match> responseList = new ArrayList<Match>();  

for (Match stats : matchesToday) {
 if (stats != null) {
   Match tmpMatch = new Match();
   match.setProperty1(stats.getProperty1());
  }
 responseList.add(tmpMatch); 
}

 return responseList;

需要你们的建议伙计们。这是在编写更多代码和节省内存之间进行权衡吗?解决这一问题的最佳方法是什么?

共有1个答案

燕和同
2023-03-14

对象匹配有15个属性&我只需要UI上的3个属性。我不希望用户看到对象的其他属性。

将所有字段设置为null确实很麻烦,而且容易出错。
所以我将避免使用第一种方法。

第二种方法似乎朝着更好的方向发展。
但是您不应该害怕将对象映射到其他对象,因为客户端需要查看它们的特定视图。
为“合理的”列表大小进行简单的映射操作是便宜的。并且我假设您不会在UI中显示数百万行,所以大小应该是合理的。
否则您应该通过考虑分页概念来重新思考整个UI设计。

List<Match> matchesToday = matchInvService.fetchMatchByDate(today);
List<MatchDTO> responseList = new ArrayList<Match>();  

for (Match stats : matchesToday) {
 if (stats != null) {
    MatchDTO match = new MatchDTO(stats);
    responseList.add(match); 
  } 
}

return responseList;
public MatchDTO(Match match){
  this.foo = match.getFoo();
  this.bar = match.getBar();
  this.fooBar = match.getFooBar();
}

或在Java 8中:

List<MatchDTO> responseList =   
    matchInvService.fetchMatchByDate(today)
                   .stream()
                   .filter(Objects::nonNull)
                   .map(MatchDTO::new)
                   .collect(Collectors.toList);
 类似资料:
  • 显然,在示例中,我将它们设置为字符串属性,但实际上它们是其他类型的。 注意:Object1和Object2实际上是从SOAP服务器所需的XML模型生成的类。所以我不能修改它们。 在我的代码中,我必须访问Object1或Object2的'name'属性,这取决于不同的因素。这个点是一个事件处理程序,所以在某一时刻,它捕获一个用Object1调用的事件,而在其他时间,它捕获一个用Object2调用的事

  • 问题内容: var arrObj = [{a:1, b:2},{c:3, d:4},{e:5, f:6}]; 如何将其合并为一个obj? 问题答案: 如果您的环境支持,那么您可以像这样简洁地进行操作 ES5解决方案: 您可以使用这样的 此解决方案仅将的所有键及其值收集在中的每个对象中,最终将结果返回给我们。 这张支票 有必要确保我们在结果中不包括所有继承的可枚举属性。

  • 我正在进行一些考试修改工作,创建了一个Employee抽象类和两个扩展到Employee类的其他类(AcademyicEmployee和ProfessionalEmployee)。 我在Employee类中设置了一个公共静态void main来运行这些行: 我知道您不能实例化一个抽象类,并且创建的实际对象是“new”关键字之后的任何内容,但为什么允许我这样做: 我想它的工作方式是“数据类型”然后“

  • 问题内容: 要创建一个新的Integer对象,该对象在Java 1中保存值,以下其中一项是正确的,并且以下方法的区别到底是什么,因为所有方法都将打印该值? 方法1: 方法2: 方法3: 使用方法三,我得到以下警告: 问题答案: 您跳过了预期的解决方案: 此模式称为Factory方法模式。有人可能会问这种方法有什么好处。幸运的是,class的实现是开源的,因此让我们看一下: 似乎存在某种-value

  • 我有一个接受文档ID的endpoint,以及一个嵌套数组中希望更新的Employee对象。这很好用。我试着修改endpoint,让它一次更新一个以上的员工,但我不能让它工作。我不确定是我把格式搞错了,还是不可能。 我能做吗?唯一的其他选项是连续多次更新此文档吗?我认为这样做比调用endpointX次要好。我在Mongo3.6以防影响任何答案。蒂娅。

  • 本文向大家介绍写一个方法js将数组对象中某个属性值相同的对象合并成一个新对象相关面试题,主要包含被问及写一个方法js将数组对象中某个属性值相同的对象合并成一个新对象时的应答技巧和注意事项,需要的朋友参考一下 function Dog(name,age){ this.name=name; this.age=age; };