Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在一行中将泛型ToIntFunction传递给方法_Java_Java 8 - Fatal编程技术网

Java 在一行中将泛型ToIntFunction传递给方法

Java 在一行中将泛型ToIntFunction传递给方法,java,java-8,Java,Java 8,假设我有几个不同对象的列表,我想将这些对象映射到int值(例如返回字符串的长度),以便在流中执行操作。因此,我创建了一个方法,例如: public <T> int foo(List<T> list, ToIntFunction<T> toInt) { return list.stream().mapToInt(toInt).max().orElse(Integer.MIN_VALUE); } 但是,每次调用该方法时,我都必须将写入ntfunctio

假设我有几个不同对象的
列表
,我想将这些对象映射到
int
值(例如返回
字符串的长度
),以便在
流中执行操作。因此,我创建了一个方法,例如:

public <T> int foo(List<T> list, ToIntFunction<T> toInt) {
     return list.stream().mapToInt(toInt).max().orElse(Integer.MIN_VALUE);
}
但是,每次调用该方法时,我都必须将
写入ntfunction

有没有一种方法可以这样做:

foo(list, new ToIntFunction<String>(e -> e.length()) );  
//Obviously ToIntFunction is an interface and can't be instantiated 
foo(list,newtointfunction(e->e.length());
//显然ToIntFunction是一个接口,不能实例化

或者有必要使用命名变量在两行上执行此操作吗?

只需将其作为内联lambda传递,如下所示

foo(Arrays.asList("test"), e -> e.length());
或者这里有一种更具可读性的基于方法引用的方法

foo(Arrays.asList("test"), String::length);
这里的技巧是
ToIntFunction
是一个单一的抽象方法接口,该语言允许您使用lambda表达式创建这些接口的实例

上面的lambda表达式只是一个语法糖,它替代了更详细的匿名内部类。这是Java8之前的方法

int bar = foo(Arrays.asList("test"), new ToIntFunction<String>() {
    @Override
    public int applyAsInt(String value) {
        return value.length();
    }
});
intbar=foo(Arrays.asList(“test”),新的ToIntFunction(){
@凌驾
public int applyAsInt(字符串值){
返回值.length();
}
});
int bar = foo(Arrays.asList("test"), new ToIntFunction<String>() {
    @Override
    public int applyAsInt(String value) {
        return value.length();
    }
});