我有下面的代码。
public static ModuleKey getDeployableModuleFromModulesList(List<Module> modules) {
ModuleKey deployableModuleKey = null;
for(Module module : modules) {
List<Artifact> artifacts = module.getArtifacts();
for(Artifact artifact : artifacts) {
if(artifact.getType().equals("ear")) {
return module.getKey();
} else if(!artifact.getType().equals("ear")) {
if(artifact.getType().equals("war")) {
deployableModuleKey = module.getKey();
}
}
}
}
return deployableModuleKey;
}
如何使用Java 8的lambda和流来实现这一目标?
答案 0 :(得分:4)
我可能误解了这个问题:如果您正在寻找带有'deployableModuleKey'
或key='ear'
的第一个'war'
:
modules.stream().flatMap(e -> e.getArtifacts().stream())
.filter(e -> e.getType().equals("ear") || e.getType().equals("war"))
.findFirst().orGet(null);
如果您想查找带'deployableModuleKey'
的第一个key='ear'
或带key = 'war'
的最后一个public static ModuleKey getDeployableModuleFromModulesList(List<Module> modules) {
Optional<ModuleKey> op = modules.stream().filter(m -> m.getArtifacts().stream().anyMatch(e -> e.getType().equals("ear"))).map(m -> m.getKey())
.findFirst();
if (!op.isPresent()) {
op = modules.stream().filter(m -> m.getArtifacts().stream().anyMatch(e -> e.getType().equals("war"))).map(m -> m.getKey()).reduce((a, b) -> b);
}
return op.orElse(null);
}
。可能需要两个陈述:
Stream.of(modules).findFirstOrLast(
m -> m.getArtifacts().stream().anyMatch(e -> e.getType().equals("ear")),
m -> m.getArtifacts().stream().anyMatch(e -> e.getType().equals("war"))).orNull();
2月8日更新,如果你不介意使用我的库:AbacusUtil,代码可以简化为:
var values = {
4: { color: 'green', title: 'Ok' },
3: { color: 'green', title: 'Ok' },
0: { color: 'red', title: 'Bad' },
default: { color: 'orange', title: 'Average' }
};