我应该如何重构这样的行?
return chars.codePoints().mapToObj(cp->((!Character.UnicodeBlock.SPECIALS.equals(Character.UnicodeBlock.of(cp))) && (! Character.isISOControl(cp)))?"'"+String.valueOf(Character.toChars(cp))+"'":"0x"+Integer.toHexString(cp)).collect(Collectors.joining(","));
我应该吗
- 将流重新分配给局部变量,使其“更加垂直”,但将 lambda 保留在使用的位置
创建一个类似
private String codePointToString(int cp) {...}
的方法将 lambda 缩短为cp->codePointToString(cp)
创建函数常量而不是方法:
private static final IntFunction<String> codePointToString = cp->{...};
并像mapToObj(codePointToString)
一样使用它
?
最佳答案
我确实会提取一个方法codePointToString()
,这将使代码更易于阅读和单元测试。我还希望每行一个步骤:
return chars.codePoints()
.mapToObj(this::codePointToString)
.collect(Collectors.joining(","));
为了使提取方法的代码可读,我还会在运算符周围放置空格,并使用 if
而不是三元运算符
private String codePointToString(int codePoint) {
if (!Character.UnicodeBlock.SPECIALS.equals(Character.UnicodeBlock.of(cp))
&& !Character.isISOControl(cp)) {
return "'" + String.valueOf(Character.toChars(cp)) + "'";
}
else {
return "0x" + Integer.toHexString(cp);
}
}
关于java - 使用 Java8 流 api 避免长代码行的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28022252/