通过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.gif
private 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.gif
private 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.gif
private 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;
    }

如果要添加到集合的对象是另一种方法的结果,IDE将使用map()以惯用的方式处理它:

上一篇下一篇

猜你喜欢

热点阅读