Java 在本例中,如何使用streams或lambda而不是for循环?

Java 在本例中,如何使用streams或lambda而不是for循环?,java,lambda,java-stream,Java,Lambda,Java Stream,如果可能的话,我想用streams重写这个函数 public void onTransfer(TransferEvent event) { StringBuilder builder = new StringBuilder(); for (Object item : event.getItems()) { Permission perm = Permission.valueOf((String) item); try {

如果可能的话,我想用streams重写这个函数

public void onTransfer(TransferEvent event) {

    StringBuilder builder = new StringBuilder();
    for (Object item : event.getItems()) {
        Permission perm = Permission.valueOf((String) item);

        try {
            if (event.isAdd()) {
                currentRole.add(perm);
            } else {
                currentRole.remove(perm);
            }
        } catch (Exception e) {
            addErrorMessage("", e.getLocalizedMessage());
            LOGGER.error(e.getMessage(), e);
        }
        builder.append(perm.name()).append(";");
    }

    addMessage("", "Transfered permissions " + builder.toString() + " from/to role :" + currentRole.getName());
}

提前谢谢你

将其重写为流函数将如下所示:

event.getItems().stream()
    .map(item -> Permission.valueOf((String) item))
    .forEach(perm -> {try-clause})
addMessage(event.getItems().stream()
    .map(item -> Permission.valueOf((String) item).name())
    .collect(Collectors.joining(";", "Transfered permissions ", " from/to role :" + currentRole.getName()));

为什么?这项工作不太适合溪流,有副作用。这是我的雇主给我的锻炼。我应该使用streams或lambdaWhilst完全同意这种方法有副作用,因此不适合使用streams,我想看看我的IDE是否会为
for
循环提供一个到
stream.forEach
的重构。我相信它会符合你雇主的标准,而且根据你的品味,它可能会被认为更具可读性。虽然您可能还想将循环中的逻辑提取到私有方法。您能给我一个例子吗?:)请注意,如果没有所有其他类,这将无法得到正确的测试。谢谢!有没有一种不用偷看的方法,或者这是唯一的方法?谢谢你指出@realponsibility,我忘记了这个问题。我现在用更好的方法纠正了它。参考:缺少一些内容,在转移权限后,还需要在收集器内部包含上面所述的+builder.toString()+。我自己修复了它,谢谢剩下的:)collect操作应该正确地替换stringbuilder,将所有以;分隔的名称连接起来;。如果我犯了错误,请编辑答案,以便将来的读者得到正确的解决方案。