java - 使用 .apply 引用方法
问题描述
我有一个简单类的名为“赛车手”的列表
class Racer {
private String name;
private String teamName;
// and getters
}
我正在使用 а 方法来查找列表中字段的最大长度:
int maxRacerNameLength = getMaxFieldLength(racers, Racer::getName);
int maxTeamNameLength = getMaxFieldLength(racers, Racer::getTeamName);
方法实现:
private int getMaxFieldLength(List<Racer> racers, Function<Racer, String> getter) {
return racers.stream().mapToInt(racer -> getter.apply(racer).length()).max().getAsInt();
}
如何使用方法参考摆脱最后一个 lambda?
解决方案
如果实现必须始终找到int
egers 流的最大值,那么您可能更喜欢 a 而不是ToIntFunction
a Function<Racer, String>
。这会将方法的实现和签名更改为:
private int getMaxFieldLength(List<Racer> racers, ToIntFunction<Racer> toLength) {
return racers.stream()
.mapToInt(toLength)
.max()
.orElse(Integer.MIN_VALUE); // or throw exception for empty racers
}
这反过来又会将该方法的用法变为:
int maxRacerNameLength = getMaxFieldLength(racers, racer -> racer.getName().length());
int maxTeamNameLength = getMaxFieldLength(racers,racer -> racer.getTeamName().length());
推荐阅读
- node.js - MERN堆栈访问控制
- c# - Api 在 Postman 中运行良好,但在 Xamarin Forms 代码中运行良好
- sql - 每个月得到总和
- java - 使用Java将项目添加到HashMap中的存在键
- javascript - 如何以角度解决模糊和同时提交事件
- python - 使用 Beautiful Soup 将多个列表项包装在新标签 ('ul'/'ol') 中?
- python - 循环内的尖峰值
- java - 需要与 ElasticSearch 6.8.2 兼容的 org.elasticsearch.client 的 x-pack-transport 版本
- azure - 尝试在 Azure CLI 中为 eventgrid 显示事件订阅时出错
- macos - 在 mac os x 中使用 crontab 每分钟将文本附加到文件中不起作用