Como en la corriente de Java al ejecutar el método .max () hacer valor de incremento

FreeOnGoo:

Tengo una entidad que tiene un valor de posición en la lista. Y es necesario determinar el valor de la siguiente posición, obteniendo el último valor y aumentando en uno. Si no hay ningún elemento uno, y luego volver a cero.

public class App {
    public static void main(String[] args) {
        ArrayList<Entity> entities = new ArrayList<>();

        long nextPositionOrFirstIfNotExistWhenEmpty = getNextPositionOrFirstIfNotExist(entities);
        if (nextPositionOrFirstIfNotExistWhenEmpty != 0L) {
            throw new RuntimeException("Invalid");
        }

        entities.add(new Entity(2L));
        entities.add(new Entity(123L));
        entities.add(new Entity(3L));

        long nextPositionOrFirstIfNotExist = getNextPositionOrFirstIfNotExist(entities);
        if (nextPositionOrFirstIfNotExist != 124L) {
            throw new RuntimeException("Invalid");
        }
    }

    // how to refactoring this? not like "optionalLong.isPresent()"
    public static long getNextPositionOrFirstIfNotExist(List<Entity> entities) {
        OptionalLong optionalLong = entities.stream()
                .mapToLong(Entity::getPositionInList)
                .max();

        return optionalLong.isPresent() ? optionalLong.getAsLong() + 1 : 0L;
    }
}

class Entity {

    public Entity(Long positionInList) {
        this.positionInList = positionInList;
    }

    private Long positionInList;

    public Long getPositionInList() {
        return positionInList;
    }

    public void setPositionInList(Long positionInList) {
        this.positionInList = positionInList;
    }
}

¿Es posible hacer que de alguna manera los cambios en una sola línea de modo que para el valor máximo obtenido aumentar inmediatamente por uno si hay y si no, a continuación, volver a cero

Es decir, como tales (pseudocódigo):

long value = entities.stream()
                .mapToLong(Entity::getPositionInList)
                .max()
                .map(i -> i + 1)    // it's not work, just what i want
                .orElse(0L);
Lino:

Sólo volver -1si no se encuentra nada, entonces su valor normal se incrementa en 1si está presente y de lo contrario resultará en 0si no se encuentra nada.

long value = entities.stream()
                     .mapToLong(Entity::getPositionInList)
                     .max()
                     .orElse(-1) + 1;

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=178052&siteId=1
Recomendado
Clasificación