Java8 函数式接口-IntFunction

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];
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jaemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值