- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在测试 Java (Java 8) 的新主要更新,它非常有趣。我正在使用流;特别是我正在使用这个简单的代码。
private void getAvg()
{
final ArrayList<MyPerson>persons = new ArrayList<>
(Arrays.asList(new MyPerson("Ringo","Starr"),new MyPerson("John","Lennon"),new MyPerson("Paul","Mccartney"),new MyPerson("George","Harrison")));
final OptionalDouble average = persons.stream().filter(p->p.age>=40).mapToInt(p->p.age).average();
average.ifPresent(System.out::println);
return;
}
private class MyPerson
{
private final Random random = new Random();
private final String name,lastName;
private int age;
public MyPerson(String name,String lastName){this.name = name;this.lastName = lastName;this.age=random.nextInt(100);}
public MyPerson(String name,String lastName,final int age){this(name,lastName);this.age=age;}
public String getName(){return name;}
public String getLastName(){return lastName;}
public int getAge(){return age;}
}
这个例子我理解的很清楚但是后来看到也可以这样实现:
final OptionalDouble average = persons.stream().filter(p->p.age>=40)
.mapToInt(MyPerson::getAge).average();
average.ifPresent(System.out::println);
我已经检查了方法toIntFunction,实际上有以下签名:
@FunctionalInterface
public interface ToIntFunction<T> {
/**
* Applies this function to the given argument.
*
* @param value the function argument
* @return the function result
*/
int applyAsInt(T value);
}
据我所知,applyAsInt 有一个输入并返回一个 int,只要我能理解。
这段代码:
MyPerson::getAge
调用:
public int getAge(){return age;}//please correct me at this point
我的问题是:方法 getAge
没有参数并返回一个 int 但 toIntFunction 接收一个参数 - 这是我的部分不明白。
toIntFunction
中的参数是推断出来的。
最佳答案
请记住,方法引用只是 lambda 的快捷方式。因此,实例方法引用是一个在参数上调用该方法的 lambda。参数的类型是方法引用中给出的类。它有助于“解开”它。
MyPerson::getAge
解包为 lambda:
(MyPerson p) -> p.getAge()
解包为匿名类:
new ToIntFunction<MyPerson>() {
@Override
public int applyAsInt(MyPerson p) {
return p.getAge();
}
}
对于静态方法引用,签名必须完全匹配,即静态方法接受一个T
并返回一个int
。对于实例方法引用,lambda 的参数 T
是调用该方法的对象。
关于Java 8 mapToInt 和 toIntFunction 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22444731/
我正在测试 Java (Java 8) 的新主要更新,它非常有趣。我正在使用流;特别是我正在使用这个简单的代码。 private void getAvg() { final ArrayList
ToIntFunction i = (x)-> Integer.parseInt(x); System.out.println(i.applyAsInt("21235")); 上面是 TointFun
如果我编写 ToIntFunction 接口(interface),我想在接口(interface)中编码这样一个事实,即它只是一个返回原始 int 的函数,如下所示: @FunctionalInte
我是一名优秀的程序员,十分优秀!