需要帮助优化以下代码

Need help in optmizing the following code

我正在使用 google 番石榴库从提到的包中递归获取所有 类 并遍历所有 public 方法并获取它们的参数。然后 "mapOfpackageMethodParameters" 将传递给 gson 对象,它将给我 json.

有什么方法可以通过使用 lambda 或 java8 流 api 来优化两个最内层的 for 循环。还有其他建议吗??

String[] packagenames = { "com.example" };
LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>> mapOfpackageMethodParameters = new LinkedHashMap<>();
for (String packagename : packagenames) {
    List<ClassInfo> clazzList = ClassPath.from(ClassLoader.getSystemClassLoader())
            .getTopLevelClassesRecursive(packagename).stream().filter(c -> c.getPackageName().endsWith("test"))
            .collect(Collectors.toList());
    for (ClassInfo class1 : clazzList) {
        List<Method> methodList = Arrays.asList(Class.forName(class1.getName()).getMethods());
        LinkedHashMap<String, LinkedHashMap<String, String>> methodMap = new LinkedHashMap<>();
        for (Method method : methodList) {
            List<Parameter> parameterList = Arrays.asList(method.getParameters());
            LinkedHashMap<String, String> parameterMap = parameterList.stream()
                    .collect(Collectors.toMap(param -> param.getName(), param -> param.getType().toString(),
                            (x, y) -> x, LinkedHashMap::new));
            methodMap.put(method.getName(), parameterMap);
        }
        mapOfpackageMethodParameters.put(class1.getName(), methodMap);
    }
}

这是根据上述代码预期和生成的最终 json。

{
    "com.example.test.dummyclass": {
        "sampletest1": {
            "dummyargument1": "class java.lang.String",
            "dummyargument2": "class java.lang.String"
        },
        "sampletest2": {
            "dummyargument1": "class java.lang.String",
            "dummyargument2": "class java.lang.Integer"
        }
    }
}

您可以将每个 for..each 循环转换为流,然后收集到 LinkedHashMap。使整个操作非常实用。

String[] packageNames = { "com.example" };
LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>> mapOfpackageMethodParameters = Arrays
    .stream(packageNames)
    .flatMap(packageName -> ClassPath
        .from(ClassLoader.getSystemClassLoader())
        .getTopLevelClassesRecursive(packageName)
        .stream())
    .filter(classInfo -> classInfo.getPackageName().endsWith("test"))
    .map(ClassInfo::load)
    .collect(Collectors.toMap(
        Class::getName,
        clazz -> Arrays
            .stream(clazz.getMethods())
            .collect(Collectors.toMap(
                Method::getName,
                method -> Arrays
                    .stream(method.getParameters())
                    .collect(Collectors.toMap(
                        Parameter::getName,
                        param -> param.getType().toString(),
                        (x, y) -> x, LinkedHashMap::new)),
                (x, y) -> x, LinkedHashMap::new)),
        (x, y) -> x, LinkedHashMap::new));