【发布时间】:2016-03-10 07:47:31
【问题描述】:
源码(当然项目还有很多其他的类)
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Stream;
public class Test {
public static void main(String[] args) {
Map<Integer, Integer> src = new HashMap<>();
Map<Integer, List<Integer>> dst = new HashMap<>();
Optional<Object> f = dst.values().stream().flatMap((Function<List<Integer>, Stream<?>>) integers -> integers.stream()).filter(b -> !src.containsKey(b)).findFirst();
f.ifPresent(b -> {
throw new IllegalStateException("exception [" + b + "]");
});
}
}
1.将项目复制到不同的路径
d:\Users\shell\Documents\workplace\bak\1
d:\Users\shell\Documents\workplace\bak\2
2.在两个路径中执行mvn包
3.检查类文件
在 d:\Users\shell\Documents\workplace\bak\1\data\target\classes 中执行命令 javap -p
public class Test {
public Test();
public static void main(java.lang.String[]);
private static void lambda$main$84(java.lang.Object);
private static boolean lambda$main$83(java.util.Map, java.lang.Object);
private static java.util.stream.Stream lambda$main$82(java.util.List);
}
在 d:\Users\shell\Documents\workplace\bak\2\data\target\classes 中执行命令 javap -p
public class Test {
public Test();
public static void main(java.lang.String[]);
private static void lambda$main$75(java.lang.Object);
private static boolean lambda$main$74(java.util.Map, java.lang.Object);
private static java.util.stream.Stream lambda$main$73(java.util.List);
}
为什么lambda函数的个数不一样?
有什么办法可以使它们相同吗?
【问题讨论】:
-
为什么lamba方法的名字对你很重要?请注意,它也是私有的,因此不应影响任何其他类。
-
fork=true 对我不起作用。
-
@Thilo 不能代表 OP,但具有确定性、一致的输出可以通过跳过某些部分来帮助加快大型复杂构建
-
@JB Nizet:
private方法的名称(无论是否确定)如何影响复杂构建的速度?这听起来像是软件项目模块化的一大失败。 -
@Holger 当后续任务需要复制文件或将它们 jar 然后复制到远程位置时,具有最终完全相同的类文件和 jar 文件允许构建过程跳过某些任务。例如,gradle 可以检测到任务的输入与之前的输入相同,并跳过该任务,以实现更快的增量构建