method-reference相关内容
我偶然发现了以下 Java 代码,它使用了 System.out.println 的方法引用: class SomeClass {公共静态无效主(字符串 [] args){列表数字 = Arrays.asList(1,2,3,4,5,6,7,8,9);numbers.forEach(System.out::println);}}} System.out::println 的等效 lambda
..
考虑我有如下代码: class Foo {Y func(X x) {...}void doSomethingWithAFunc(Function f){...}无效热函数(){doSomethingWithAFunc(this::func);}} 假设 hotFunction 被频繁调用.那么是否建议缓存 this::func,也许像这样: class Foo {函数f = this::fu
..
我有一个包含一些 User 对象的列表,我正在尝试对列表进行排序,但只能使用方法引用,使用 lambda 表达式编译器会给出错误: ListuserList = Arrays.asList(u1, u2, u3);userList.sort(Comparator.comparing(u -> u.getName()));//有效userList.sort(Comparator.comparing
..
我正在寻找一种通过引用传递方法的方法.我知道 Java 不会将方法作为参数传递,但是,我想获得替代方法. 有人告诉我接口是将方法作为参数传递的替代方法,但我不明白接口如何通过引用充当方法.如果我理解正确,接口只是一组未定义的抽象方法.我不想发送每次都需要定义的接口,因为几个不同的方法可以使用相同的参数调用相同的方法. 我想要完成的事情与此类似: public void setAllC
..
下面的代码包含对 Enum::name 的引用(注意没有类型参数). public static >ColumnTypeenumColumn(Class klazz) {return simpleColumn((row, label) -> valueOf(klazz, row.getString(label)), Enum::name);}公共静态ColumnType
..
我正在寻找一种通过引用传递方法的方法.我知道 Java 不会将方法作为参数传递,但是,我想获得替代方法. 有人告诉我接口是将方法作为参数传递的替代方法,但我不明白接口如何通过引用充当方法.如果我理解正确,接口只是一组未定义的抽象方法.我不想发送每次都需要定义的接口,因为几个不同的方法可以使用相同的参数调用相同的方法. 我想要完成的事情与此类似: public void setAllC
..
假设我们有一个 IntFunction 类型的变量,它返回一个整数数组: IntFunction一世; 使用 Java 8 泛型,可以使用这样的构造函数引用来初始化这个变量: i = int[]::new Java 编译器如何将其转换为字节码? 我知道对于其他类型,例如 String::new,它可以使用一个 invokedynamic 指令指向 String 构造函数 java/l
..
我正在学习如何使用流,但我在使用此方法时遇到了问题. public static String[] inArray(String[] array1, String[] array2) {返回 Arrays.stream(array1).filter(str -> Arrays.stream(array2).anyMatch(s -> s.contains(str))).distinct().so
..
我正在尝试通过 LambdaMetafactory 动态创建 BiConsumer 类型的方法引用.我试图应用在 https://上找到的两种方法www.cuba-platform.com/blog/think-twice-before-using-reflection/ - createVoidHandlerLambda 和这里 创建 BiConsumer 作为没有反射的 Field sette
..
当我使用绑定到变量 dog 的方法引用时,为什么代码不会抛出 NullPointerException,我后来将 null 分配给了该变量? 我使用的是 Java 8. import java.util.function.Function;类狗{私人食物= 10;公共 int 吃(int num){System.out.println("吃" + num);this.food -= num
..
让我们说一个谓词和一个 Function -接口: Function函数= null;谓词谓词= null; 现在,我想给 Predicate -Interface一个方法引用,其中返回类型为 boolean ,在我们的示例中为参数字符串.但是,为什么以下方法参考似乎正确: 谓词谓词= String :: isEmpty
..
我了解到方法参考中有4种类型.但是我不理解" 引用静态方法 "和" 引用特定对象的实例方法"之间的区别输入 ". 例如: 列表周=新的ArrayList();week.add("Monday");week.add(“星期二");week.add("Wednesday");week.add(“星期四");week.add(“星期五");week.add("Saturda
..
我目前正在更深入地研究 Java 8 功能,例如Lambda和方法引用.玩一会儿,使我进入了以下示例: 公共类ConsumerTest {私有静态最终String [] NAMES = {"Tony","Bruce","Steve","Thor"};公共静态void main(String [] args){Arrays.asList(NAMES).forEach(Objects :: requ
..
我尝试使用与Java中相同的方法引用: button.setOnClickListener(this::clickListener); 使用Kotlin: button.setOnClickListener {this::clickListener} 但是,这在Kotlin中不起作用,解决方案是使用labmda表达式实际调用该函数: button.setOnClickLi
..
我试图理解方法引用,但是我不知道如何使用此"Book [] :: new"它可以创建一个 具有正确数量的元素的数组. Book[] arrayBook = stBooks.toArray(Book[]::new); 为了在使用第二个和第三个选项时创建数组,我必须指定一个功能接口 会收到一个Int并返回一个新的数组. 但是,在第一个选项中,我不知道实现在哪里以及您在哪里指定数字或 具
..
据我所知,lambda表达式可以被方法引用替换而没有任何问题.我的IDE表示相同,但以下示例却相反. 该方法引用显然会返回相同的对象,而lambda表达式每次都会返回新的对象. import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class I
..
假设我在jshell中这样做: jshell> void printIsEven(int i) { ...> System.out.println(i % 2 == 0); ...> } | created method printIsEven(int) jshell> List l = Arrays.asList(7,5,4,8,5,9); l =
..
首先,让我添加实际的“示例代码": Map> allCarsAndBrands = new HashMap(); final String bmwBrandName = "BMW"; final String audiBrandName = "AUDI"; List bmwCars = new ArrayList(); bmwCars.a
..
根据文档,方法参考绝对不是静态调用.它适用于静态和非静态方法. 当我们在给定的类中定义自己的非静态方法并尝试使用“方法引用"使用它时,在Function情况下看不到编译时错误“无法对非静态方法进行静态引用",而在情况下才看到供应商,消费者和谓词.为什么会这样? class Demo{ private Function p= Student::get
..
给.. List copy(List foos) { return foos .stream() .map(foo -> new Foo(foo)) .collect(Collectors.toList()); } IntelliJ IDEA 2016.1.1报告new Foo(foo)“
..