java - 如何从列表中收集多个列表通过使用 java 8 流?
问题描述
我有 TradeChartDTO 列表,我想从这个列表中收集多个列表。我确实喜欢这个。但我想通过使用单流来收集。我不想一次又一次地收集多个列表。
我这样做了。
private Map<String, Object> getJsonAccordingToChartApi(List<TradeChartDTO> tradeChartDTO) {
List<BigDecimal> high = tradeChartDTO.stream().map(chart -> chart.getHigh()).collect(Collectors.toList());
List<BigDecimal> low = tradeChartDTO.stream().map(chart -> chart.getLow()).collect(Collectors.toList());
List<BigDecimal> close = tradeChartDTO.stream().map(chart -> new BigDecimal(chart.getClose())).collect(Collectors.toList());
List<BigDecimal> open = tradeChartDTO.stream().map(chart -> new BigDecimal(chart.getOpen())).collect(Collectors.toList());
List<BigDecimal> volume = tradeChartDTO.stream().map(chart -> chart.getVolume()).collect(Collectors.toList());
List<BigDecimal> timestamp = tradeChartDTO.stream().map(chart -> new BigDecimal(chart.getTimestamp())).collect(Collectors.toList());
Map<String, Object> mainData = new HashMap<>();
mainData.put("t", timestamp);
mainData.put("c", close);
mainData.put("o", open);
mainData.put("v", volume);
mainData.put("h", high);
mainData.put("l", low);
return mainData;
}
TradeChartDTO.java
@Getter
@Setter
@NoArgsConstructor
public class TradeChartDTO {
private Integer timestamp;
private BigDecimal volume;
private String open;
private BigDecimal high;
private BigDecimal low;
private String close;
private BigDecimal price;
}
有没有其他方法可以做到这一点?
解决方案
我唯一知道要做的就是引入相同键和映射函数的映射,以帮助您转换 DTO:
Map<String, Function<TradeChartDTO, Object>> functionMap = new HashMap<>();
functionMap.put("v", TradeChartDTO::getVolume);
functionMap.put("l", TradeChartDTO::getLow);
functionMap.put("h", TradeChartDTO::getHigh);
functionMap.put("c", chart -> new BigDecimal(chart.getClose()));
functionMap.put("o", chart -> new BigDecimal(chart.getOpen()));
functionMap.put("t", chart -> new BigDecimal(chart.getTimestamp()));
Map<String, Object> mainData = functionMap.entrySet().stream().collect(Collectors.toMap(
Entry::getKey,
e -> tradeChartDTO.stream().map(e.getValue()).collect(Collectors.toList())
));
真正的好处是值得怀疑的,但是,您节省了一半的行。这是一个偏好问题。
推荐阅读
- python - 在 Python 中,如何获取表示为 int 的浮点数的前 N 个十进制数字?
- vue.js - 如何将 Nuxt ssr 部署到 Cpanel
- c# - 在 Linux 中以编程方式写入和读取环境变量
- html - 用于在 html 中显示(嵌入)图像的语法,图像路径是动态的并存储在 DB 字段中
- reactjs - 为什么 setState 不重新渲染应用程序?
- google-sheets - 未正确导入 XML 中的值
- python - 您是否必须完整输入 numpy.ndarray 以获得 Google 样式文档字符串中的类型提示,或者您可以只输入 np.ndarray?
- webkit - Tcl/Tk 与 WebKit?
- postgresql - 为什么 PSQL \z 和 information_schema.table_privileges 显示不同的细节?
- git - PyDriller - “参考不是一棵树”