我在 java-7 中有一个 for 语句,它工作正常:
Character cha = new Character(',');
String ncourseIds = null;
String pastCourseIds = null;
for (EquivalentCourse equivalentCourse : equivalentCourses) {
if(equivalentCourse.getNcourse() != null){
ncourseIds += equivalentCourse.getNcourse().getId()+ ",";
} else if(equivalentCourse.getPastCourse() != null) {
pastCourseIds +=equivalentCourse.getPastCourse().getId()+",";
}
}
if(!ncourseIds.isEmpty() &&cha.equals(ncourseIds.charAt(ncourseIds.length()-1))) {
ncourseIds = ncourseIds.substring(0, ncourseIds.length()-1);
}
if(!pastCourseIds.isEmpty()&& cha.equals(pastCourseIds.charAt(pastCourseIds.length()-1))) {
pastCourseIds = pastCourseIds.substring(0,pastCourseIds.length()-1);
}
现在我想将我的代码转换为 Stream
& collect
在 java-8 中,我实现了一半关于过滤器不为空的业务 Ncourse
:
equivalentCourses.stream().filter(obj -> obj.getNcourse() != null )
.map(obj -> obj.getNcourse().getId()).collect(Collectors.joining(","));
但我不知道要实现它的 else-statement
。有帮助吗?
原文由 Shayan Mirzaee 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于流调用链很复杂,因此需要创建两个流 - 避免条件分支。
这也是专注于生成的两个字符串的代码,具有高效的连接。
顺便说一句,如果这是针对 SQL 字符串的,则可以使用带有 Array 的 PreparedStatement。
@Holger 评论的装饰: