在一行中将通用 ToIntFunction 传递给方法

假设我有几个List不同的对象,我想将这些对象映射到一个int值(例如返回 a 的长度String),以便我可以在 a 中执行操作Stream。所以我创建了一个方法,例如:


public <T> int foo(List<T> list, ToIntFunction<T> toInt) {

     return list.stream().mapToInt(toInt).max().orElse(Integer.MIN_VALUE);

}

(注:max可能是其他一些终端操作)


然后我想传递一个ToIntFunction给它。我可以:


ToIntFunction<String> length = e -> e.length();

int bar = foo(list, length);

ToIntFunction但是,每次调用该方法时,我都必须写出。


有没有办法做类似的事情:


foo(list, new ToIntFunction<String>(e -> e.length()) );  

//Obviously ToIntFunction is an interface and can't be instantiated 

还是有必要用命名变量在两行上做?


弑天下
浏览 178回答 1
1回答

芜湖不芜

就像这样将它作为内联 lambda 传递,foo(Arrays.asList("test"), e -> e.length());或者这里是更易读的基于方法参考的方法,foo(Arrays.asList("test"), String::length);这里的技巧是它ToIntFunction<T>是一个单一的抽象方法接口,并且该语言允许您使用 lambda 表达式创建这些接口的实例。上面的 lambda 表达式只是一个语法糖,它替代了更冗长的匿名内部类。这是 Java8 之前的方法。int bar = foo(Arrays.asList("test"), new ToIntFunction<String>() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public int applyAsInt(String value) {&nbsp; &nbsp; &nbsp; &nbsp; return value.length();&nbsp; &nbsp; }});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java