【问题标题】:Using Java 8 lambda and Stream for information extraction使用 Java 8 lambda 和 Stream 进行信息提取
【发布时间】:2016-03-01 06:59:24
【问题描述】:

代码:

List<ServiceConfig> serviceConfigList = cr.getServiceConfigs();
for (ServiceConfig ser : serviceConfigList ) {
    if (ser.getValid().equals("true")) {
        Connection.SERVICE_PORT = ser.getPort();
        Connection.SERVICE_ADDRESS = ser.getIp();
        Connection.SERVICE_URL = ser.getUri();
        connection.connect(Connection.SERVICE_ADDRESS, ser.getName() + ":" + ser.getPassword());
    }
}

如何使用 Java 8 Streams 和 lambdas 重写此代码?

【问题讨论】:

  • 能否改写一下 - 我有一个固定的列表,但我只是想满足信息的标准,我想由 Stram 完成。?

标签: java java-8 java-stream


【解决方案1】:

这样的事情应该为你做:

    serviceConfigList.stream()
        .filter(ser -> ser.getValid().equals("true"))
        .forEach(ser -> {
            Connection.SERVICE_PORT = ser.getPort();
            Connection.SERVICE_ADDRESS = ser.getIp();
            // other code..
    });

PS:我没有你的完整代码。所以帮不上忙。

【讨论】:

  • 如果您首先编写字符串文字比较,您将获得更健壮的代码:"true".equals(ser.getValid()),因为当ser.getValid() 返回null 时,此代码不会失败。
  • @MatthiasWimmer - 是的。我只是向 OP 展示了一种方式:)
  • @Matthias Wimmer:这取决于“稳健”的定义。如果getValid() 的结果永远不应该是null,则可以通过将其放在第一位来获得更健壮的代码,就像在答案 (ser.getValid().equals("true")) 中一样,因为当断言不成立时,您可能会更早地学习。不是绝对的,而是在尽力的基础上,就像快速失败的迭代器发现并发修改一样。所以就看getValid()的合约了……
  • @Holger - 是的。这取决于您希望它是故障安全还是快速故障
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 2017-08-03
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多