Fre*_*Goo 5 java java-8 java-stream
我有一个在列表中具有位置值的实体。然后,您需要通过获取最后一个值并增加一个来确定下一个头寸的值。如果没有一个元素,则返回零。
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;
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以以某种方式在单行中进行更改,以便对于获得的最大值,如果存在则立即增加一,如果不存在则立即增加零
也就是说,例如这样(伪代码):
long value = entities.stream()
.mapToLong(Entity::getPositionInList)
.max()
.map(i -> i + 1) // it's not work, just what i want
.orElse(0L);
Run Code Online (Sandbox Code Playgroud)
-1如果什么也没找到就返回,那么如果您的正常值存在,则将其增加;1否则,0如果没有任何结果,则将导致其正常值。
long value = entities.stream()
.mapToLong(Entity::getPositionInList)
.max()
.orElse(-1) + 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |