0
点赞
收藏
分享

微信扫一扫

Java8 函数式接口-IntFunction

扒皮狼 2022-12-03 阅读 31


public class App {
public static void main(String[] args) {
List<InvokeDTO> invokes = Lists.newArrayList();
for (int i = 1; i < 6; i++) {
invokes.add(new InvokeDTO("key" + i, "value" + i));
}

String[] keys = invokes.stream().map(InvokeDTO::getKey).toArray(size -> new String[size]);
// 等价
// String[] keys = invokes.stream().map(InvokeDTO::getKey).toArray(String[]::new);
System.out.println(Arrays.asList(keys));
}
}

public interface Stream<T> extends BaseStream<T, Stream<T>> {
// 接受一个int参数,返回一个类型A数组
<A> A[] toArray(IntFunction<A[]> generator);
}

Java是无法创建泛型数组的,因为泛型没有具体的类型,因为无法被new出来
Java8的lambda就提供了这样一个功能,可以通过lambda来实现一个接口方法,这个接口会返回一个数组

@FunctionalInterface
public interface IntFunction<R> {
// 接受一个int参数,返回一个R
R apply(int value);
}

IntFunction用法:

// 指定要创建的数组类型
IntFunction<Date[]> intFunction = Date[]::new;
// 创建一个指定长度的数组
Date[] dates = intFunction.apply(10);

实际应用:

Map<Date,String> map = new HashMap();
Date[] dates = map.keySet().stream().toArray(Date[]::new);

这段代码将map中的所有索引值保存成一个数组,相当于以下代码

Date[] dates = map.keySet().stream().toArray(size -> {
return new Date[size];
});


举报

相关推荐

0 条评论