【问题标题】:How to translate a lambda expression to normal code?如何将 lambda 表达式转换为普通代码?
【发布时间】:2019-10-21 21:49:23
【问题描述】:

我用 java 1.8 编写,现在我需要降级到 1.6。我在以正常方式编写此代码时遇到问题。有什么建议吗?

return Stream.of(field.getText().split(","))
             .map(String::trim)
             .filter(s -> !s.isEmpty())**
             .map(Integer::valueOf)
             .collect(Collectors.toSet());

这就是我尝试过的:

if(!splitted[i].isEmpty()) {
   set.add(Integer.valueOf(splitted[i]));
}  

【问题讨论】:

  • 你不应该使用这么旧的java版本。
  • 您可以从迭代field.getText().split(",") 的结果开始,filter 可以替换为 if 语句,map 使用函数调用。
  • 是的,我知道@Jens,但我也需要。一些计算机正在运行 java 1.6
  • 感谢@NaderHajlaoui,这就是我开始做的事情,但卡在.map 上

标签: java for-loop java-stream


【解决方案1】:
Set<Integer> results = new HashSet<>();
for (String part : field.getText().split(",")) {
    String trimmed = part.trim();
    if (trimmed.isEmpty()) continue;
    results.add(Integer.valueOf(trimmed));
}

【讨论】:

  • 谢谢@DDovzhenko。这是错的吗?我更新了我的问题。
  • @AristotelisPozidis 你忘了在你的部分修剪值。
【解决方案2】:

您的代码执行以下操作:

  1. 沿','分割字段文本
  2. 在每一个上调用 trim()
  3. 只对所有不为空的部分起作用
  4. 将此字符串解析为整数
  5. 将它们放在一个集合中

这可以这样完成:

编辑:for-each 更好,可以从 java 1.5 开始使用

Set<Integer> set = new HashSet<>();
for(String split : field.getText().split(",")) {
    split = split.trim();
    if(!split.isEmpty()) {
         set.add(Integer.valueOf(split));
    }
}

【讨论】:

  • 谢谢@DerMolly,我更新了我的问题是否正确?
  • 你需要创建一些实现Set的东西,我以HashSet为例
  • 是的,非常感谢您的帮助。 @DerMolly 现在它按预期工作
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多