java - DTO Collection 智能数据收集

标签 java collections java-7

假设我们有一个 ExampleDTO 列表,其中包含一些字段,其中包括“名称”字段。每次我想要获取正确字段的列表(在本例中为名称)时,我都会编写如下代码:

private List<String> getNames(List<ExampleDTO> exampleDTOs) {
    List<String> names = new ArrayList<String>();
    for (ExampleDTO exampleDTO : exampleDTOs)
        names.add(exampleDTO.getName());
    return names;
}

...但我也注意到这种代码一遍又一遍地重复。

问题是:是否有任何智能方法可以帮助我减少生成的冗余代码量?

编辑:

我的应用程序使用 Java7

最佳答案

通过 Java 7,您可以使用 Guava 的 FluentIterableFunction :

List<ExampleDTO> exampleDTOs = ...;
List<String> names = FluentIterable.from(exampleDTOs)
   .transform(new Function<ExampleDTO, String>() {
       @Override
       public String apply(ExampleDTO dto) {
           return dto.getName();
       }
   })
   .toList();

请注意,虽然整个循环被表示为单个表达式,但是性能明显比循环差,并且这是否更具可读性是非常有争议的。

我会坚持使用简单的循环,直到升级到 Java 8。

在其中一个项目中,我曾经用特殊注释来标记所有此类循环,以便在升级到 Java 8 时很容易找到所有这些地方。

<小时/>

通过 Java 8,您可以使用 Streams API:

List<ExampleDTO> exampleDTOs = ...;
List<String> names = exampleDTOs.stream()
    .map(dto -> dto.getName())
    .collect(Collectors.toList());

如果您不一定需要名称列表,它可能会变得更短 - 在这种情况下,.collect(Collectors.toList()) 部分可能是已删除。

例如,您可以直接在流上迭代名称列表,如下所示:

exampleDTOs.stream()
    .map(dto -> dto.getName())
    .forEach(name -> System.out.println(name));

这只会打印所有名称,但您可以将 System.out.println(name) 替换为其他内容。

关于java - DTO Collection 智能数据收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36552406/

相关文章:

java - 生成随机 API key ,提供了 2 种方法,有什么区别吗?

java - 如何更改 JOptionPane 中的按钮背景

java - java检查数组元素是否被填充

java - Collections.sort() 未按正确的顺序排序

Java-Stream - 使用过滤器和 forEach 填充集合

java错误: installation of android studio on ubuntu 16. 04

java - Collections.sort() 错误

java - 扩展类必须与其扩展的类具有相同的访问级别

java - 如何对 Collection<T> 进行排序?

java - 错误 :Issue with reading text file in class I created