当前位置: 首页 > 面试题库 >

Java-将对象列表映射到具有其属性属性值的列表

钱元徽
2023-03-14
问题内容

我的ViewValue类定义如下:

class ViewValue {

private Long id;
private Integer value;
private String description;
private View view;
private Double defaultFeeRate;

// getters and setters for all properties
}

在我的代码中,我需要将ViewValue实例列表转换为包含来自相应ViewValue的id字段值的列表。

我用foreach循环来做:

List<Long> toIdsList(List<ViewValue> viewValues) {

   List<Long> ids = new ArrayList<Long>();

   for (ViewValue viewValue : viewValues) {
      ids.add(viewValue.getId());
   }

   return ids;

}

有没有更好的方法来解决这个问题?


问题答案:

编辑:此答案基于以下想法:您需要对代码中其他位置的不同实体和不同属性执行类似的操作。如果您 只需
要按ID将ViewValues列表转换为Longs列表,则请坚持使用原始代码。但是,如果您想要更可重用的解决方案,请继续阅读…

我会为投影声明一个接口,例如

public interface Function<Arg,Result>
{
    public Result apply(Arg arg);
}

然后,您可以编写一个通用转换方法:

public <Source, Result> List<Result> convertAll(List<Source> source,
    Function<Source, Result> projection)
{
    ArrayList<Result> results = new ArrayList<Result>();
    for (Source element : source)
    {
         results.add(projection.apply(element));
    }
    return results;
}

然后您可以定义简单的投影,如下所示:

private static final Function<ViewValue, Long> ID_PROJECTION =
    new Function<ViewValue, Long>()
    {
        public Long apply(ViewValue x)
        {
            return x.getId();
        }
    };

并像这样应用它:

List<Long> ids = convertAll(values, ID_PROJECTION);

(显然,使用K&R支撑和更长的行会使投影声明更短:)

坦率地说,所有这些对于lambda表达式都会更好,但是没关系…



 类似资料:
  • 当遍历ACROD时,有一个列表,并希望将该列表中的第一个对象映射到我的域对象。 @mapping(source=“insurancesvcrqs[0].policyquoteinqrqsaddrqsandpolicyquoteinqrqs[0].productues[0].generalpartyinfo.nameinfos[0].commlname.commericalname”,target=

  • 问题内容: 我需要使用特定对象的属性(位置)对对象(学生)列表进行分组,代码如下所示, 请给我建议一个干净的方法。 问题答案: In Java 8:

  • 我正在创建词汇表,一个GUI程序来管理未知单词。我得到: /usr/bin/python3。5/主页/cali/Pycharm项目/词汇表/词汇表。Tkinter回调回溯中的py异常(最近一次调用最后一次): 文件“/usr/lib/python3.5/Tkinter/init.py”,第1553行,在调用返回self中。func(*args)文件“/home/cali/PycharmProjec

  • 当我尝试运行代码时,select元素出现问题。它会给我一个错误 就像我没有任何选择元素一样。是因为它没有关注弹出窗口吗?我做错了什么? MyCode.py select.py中的错误: 例外情况:

  • 问题内容: 我正在尝试读取文件,并用逗号在每行中拆分一个单元格,然后仅显示包含有关纬度和经度信息的第一和第二个单元格。这是文件: 时间, 纬度,经度 ,类型2015-03-20T10:20:35.890Z, 38.8221664,-122.7649994 ,地震 2015-03-20T10 :18:13.070Z, 33.2073333,-116.6891667 ,地震 2015-03-20T10

  • 我试图分裂链接的图像是什么错在我的代码