如何创建适用于对象列表的通用方法,只要它们具有相同的吸气剂方法

问题描述 投票:0回答:1
class County{
    private LocalDate date;
    private String county;
    private String district;
    private String region;
    private Integer cases;
// getters and setters and constructor
}
class District{
    private LocalDate date;
    private String district;
    private String region;
    private Integer cases;
// getters and setters and constructor
}

我有一个List<County> countyDataList<District> districtData,我想使用一种方法来同时播放它们。我已经能够通过编写两个单独的方法成功地流化它们,但这不是DRY(不要重复自己)。我想写一种方法可以在两个对象的列表上执行这些流。

这是对我有用的,但不是干的。

List<LocalDate> labels = countyData.stream().map(c -> c.getDate()).collect(Collectors.toList());
List<Integer> totalCases = countyData.stream().map(c -> c.getTotalCases()).collect(Collectors.toList());

List<LocalDate> labels = districtData.stream().map(c -> c.getDate()).collect(Collectors.toList());
List<Integer> totalCases = districtData.stream().map(c -> c.getTotalCases()).collect(Collectors.toList());


这里是我尝试创建一个处理两种方法的方法

public <T> void genericMethod(List<T> dataList) {

    Collections.reverse(dataList); 

    List<LocalDate> labels = dataList.stream().map(c -> c.getDate()).collect(Collectors.toList());
    List<Integer> totalCases = dataList.stream().map(c -> c.getTotalCases()).collect(Collectors.toList());

}

但是我收到以下警告:Cannot infer type argument(s) for <R> map(Function<? super T,? extends R>)

java java-stream dry
1个回答
0
投票

只需使用多态性(这就是面向对象编程的目的:使您的CountyDistrict类实现包含两个方法getDate()getTotalCases()的公共接口)>

所以您的方法变为:

public void genericMethod(List<YourInterface> dataList)
    
© www.soinside.com 2019 - 2024. All rights reserved.