You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java流中如何获取元素名称作为字符串并生成指定格式结果

问题

我有一个文件名列表[1999-01-01, 1999-06-01, 1999-11-01],可通过getRatesFiles方法获取该格式列表。我希望通过流处理该列表,利用每个元素的名称调用getRateAtDate方法读取对应文件的数据,最终生成如下格式的结果:

"Date: 1999-01-01 Rate: 0.602941",
"Date: 1999-06-01 Rate: 0.621195",
"Date: 1999-11-01 Rate: 0.60824"

现有代码如下:

public Double getRateAtDate(String symbol, String date) {
  RateListing rateListing = rlrReader.readRatesAtDate(date);
  throwExceptionIfSymbolNotFound(rateListing, symbol);

  return rateListing.rates().get(symbol);
}


public String[] getRatesForYear(String symbol, String year) {

  List<String> listOfYearFiles = rlrReader.getRatesFiles();


List<String> stringsList = listOfYearFiles.stream()
          .filter(string -> string.startsWith(year))
          .sorted()
          .map(string -> getRateAtDate(symbol, ??)
          .map(string -> "Date: " + string)
          .toList();

}

请问如何在流的map操作中传入元素名称到getRateAtDate方法,并生成指定的字符串格式?


解决方案

要实现需求,需要在流操作中保留日期字符串的上下文,同时获取对应汇率值并拼接成目标格式,具体修正如下:

  1. 合并map操作:原代码连续的两个map会丢失日期信息(第一个map将日期转为Double类型汇率),需在单个map中同时处理日期和汇率。
  2. 传入日期参数:在Lambda表达式中直接将当前流元素(日期字符串)作为第二个参数传入getRateAtDate。
  3. 拼接目标字符串:获取汇率后,按指定格式拼接字符串。

修正后的完整代码:

public Double getRateAtDate(String symbol, String date) {
  RateListing rateListing = rlrReader.readRatesAtDate(date);
  throwExceptionIfSymbolNotFound(rateListing, symbol);

  return rateListing.rates().get(symbol);
}


public String[] getRatesForYear(String symbol, String year) {
  List<String> listOfYearFiles = rlrReader.getRatesFiles();

  List<String> stringsList = listOfYearFiles.stream()
          .filter(dateStr -> dateStr.startsWith(year))
          .sorted()
          .map(dateStr -> {
              Double rate = getRateAtDate(symbol, dateStr);
              return String.format("Date: %s Rate: %s", dateStr, rate);
          })
          .toList();

  // 将List转换为String数组,满足方法返回值要求
  return stringsList.toArray(new String[0]);
}

关键说明

  • 用dateStr作为变量名替代string,提升代码语义可读性。
  • 使用String.format拼接字符串,比直接用+更简洁易维护。
  • 补充了List转String数组的逻辑,确保方法返回值符合定义。

内容的提问来源于stack exchange,提问作者santa_cloudy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:50:43