简体   繁体   中英

How would you use streams or lambda instead of for loop in this example?

I would like to rewrite this function using streams if possible.

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());
}

Thank you in advance!

Rewriting this to stream-functions would look like this:

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()));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM