用法说明
JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下。
类名::方法名
使用示例
person -> person.getAge();
转换为:
Person::getAge
new HashMap<>()
转换为:
HashMap::new
public class MyTest {
public static void main(String[] args) {
List<String> a1 = Arrays.asList("a", "b", "c");
a1.forEach(x -> MyTest.printValur(x));
}
public static void printValur(String str) {
System.out.println("print value : " + str);
}
}
a1.forEach(x -> MyTest.printValur(x));
转换为:
a1.forEach(MyTest::printValur);
或者:
Consumer<String> methodParam = MyTest::printValur;
a1.forEach(x-> methodParam.accept(x));
说明:在JDK8中,接口Iterable 8中默认实现了forEach方法,调用了 JDK8中增加的接口Consumer内的accept方法,执行传入的方法参数。
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}