通过IntelliJ IDEA 2016.3 来更好使用Java
2018-06-14 本文已影响0人
faunjoe
本文展示了IntelliJ IDEA如何帮助编写正确的和培养使用Java 8的习惯.版本使用IntelliJ IDEA 2016.3, 通过扩展了IDEA现有的检查以支持这些的案例。
现在,如果在上面定义的局部变量的循环递增中单击Alt + Enter
,IDE将提示您使用以count()结尾的一系列steam的链式 API调用来替换它。 注意,
如果循环是嵌套的,IDE将使用flatMap():
123.gifprivate static int withPrefix(List<Set<String>> nested, String prefix) {
int count = 0;
for (Set<String> element : nested) {
if (element != null) {
for (String str : element) {
if (str.startsWith(prefix)) {
count++;
}
}
}
}
return count;
}
private static int withPrefix1(List<Set<String>> nested, String prefix) {
return (int) nested.stream()
.filter(Objects::nonNull)
.flatMap(Collection::stream)
.filter(str -> str.startsWith(prefix))
.count();
}
如果变量从另一个方法返回的数字增加,IDE将使用mapToInt()/ mapToLong()/ mapToDouble():
123.gifprivate static int withPrefix2(List<Set<String>> nested, String prefix) {
int count = 0;
for (Set<String> element : nested) {
if (element != null) {
for (String str : element) {
if (str.startsWith(prefix)) {
count += str.length();
}
}
}
}
return count;
}
private static int withPrefix3(List<Set<String>> nested, String prefix) {
int sum = nested.stream()
.filter(Objects::nonNull)
.flatMap(Collection::stream)
.filter(str -> str.startsWith(prefix))
.mapToInt(String::length)
.sum();
return sum;
}
如果循环将非原始对象添加到集合中,而不是递增变量,IDE将用以collect()结尾的调用链替换它:
123.gifprivate static List<String> flatten(String[][] arr) {
List<String> result = new ArrayList<>();
for (String[] subStr : arr) {
if (subStr != null) {
for (String str : subStr) {
result.add(str);
}
}
}
return result;
}
private static List<String> flatten1(String[][] arr) {
List<String> result = Arrays.stream(arr)
.filter(Objects::nonNull)
.flatMap(Arrays::stream)
.collect(Collectors.toList());
return result;
}