FreeOnGoo:
私は、リスト内の位置の値を持つエンティティを持っています。そして、あなたは最後の値を取得し、1ずつ増加により、次の位置の値を決定する必要があります。誰要素が存在しない場合は、ゼロを返します。
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;
}
}
それがない場合は、ゼロが返された場合に得られた最大値のためにそれはすぐに1ずつ増加して何とか一行の変更を行うことが可能です
それは、そのような(擬似コード)として、です。
long value = entities.stream()
.mapToLong(Entity::getPositionInList)
.max()
.map(i -> i + 1) // it's not work, just what i want
.orElse(0L);
リノ:
ただ、返す-1
何も見つからなかった場合、その後、あなたの通常の値だけインクリメントされ1
、それが存在する場合と、そうでなければになり0
、何も見つからなかった場合。
long value = entities.stream()
.mapToLong(Entity::getPositionInList)
.max()
.orElse(-1) + 1;