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();
}
});