java - 在 Java 中用流 api 替换多个 FOR 循环的最佳方法
问题描述
我想让这个功能运行的时间更少。我假设stream()
可能会有所帮助。但不确定如何。
private List<TodayMenu> getRecommendedTodayMenuItems(Map<String, Integer> itemsGroupedDailySales, List<TodayMenu> itemsOnTodayMenu) {
List<TodayMenu> recommendedTodayMenu = new ArrayList<>();
for (Map.Entry<String,Integer> itemGroupedDailySales : itemsGroupedDailySales.entrySet()) {
for (TodayMenu todayMenu : itemsOnTodayMenu) {
if (todayMenu.getMenuId().equals(itemGroupedDailySales.getKey())) {
recommendedTodayMenu.add(todayMenu);
break;
}
}
if (recommendedTodayMenu.size() >= 9) {
return recommendedTodayMenu;
}
}
return recommendedTodayMenu;
}
解决方案
结果仅包含 itemsOnTodayMenu 的记录,因此您可以开始迭代此列表并在 itemsGroupedDailySales 中执行查找(HashMap 在这方面很好)。
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
private List<TodayMenu> getRecommendedTodayMenuItemsBetter(Map<String, Integer> itemsGroupedDailySales,
List<TodayMenu> itemsOnTodayMenu) {
return itemsOnTodayMenu.stream()
.filter((tm)->itemsGroupedDailySales.containsKey(tm.getMenuId()))
.limit(9)
.collect(Collectors.toList());
}
一句话:您不使用 itemsGroupedDailySales 的值。您的逻辑在前 9 个匹配项后停止,但没有定义顺序。例如,不是按推荐选择的销量最高的产品。我希望你知道这一点。
推荐阅读
- c# - 在包含 Picker 的自定义控件中绑定 ItemSource 属性
- javascript - Uncaught (in promise) SyntaxError: Unexpected end of JSON input when fetch get data
- c - 在不同的头文件中使用同名的宏
- google-calendar-api - Google Calendar API:当会议在其日历中不存在时,用户作为与会者存在
- c# - 执行 inkCanvas1.Strokes.Erase() 后的 WPF-InkCanvas 撤消操作
- java - Cytoscape java:将边缘一直绘制到节点的中心
- c# - c# asp.net 身份和自定义角色
- yii2 - 如何更改 yii2 Query Builder 的数据库名称
- java - 休眠@ManyToOne 映射
- git - Git 提交速度非常慢