【发布时间】:2021-10-21 14:47:52
【问题描述】:
我有一个按商品分组的商店物品列表。
class Shop{
String shopName;
String item;
int size;
...}
如何获得每个商品的 3 个最大商店(或 n 个最大商店)的列表? IE。假设我有
Shop("Walmart", "Hammer", 100);
Shop("Target", "Scissor", 30);
Shop("Walgreens", "Hammer", 300);
Shop("Glens", "Hammer", 500);
Shop("Walmart", "Scissor", 75);
Shop("Toms", "Hammer", 150);
我想返回按商品分组的前 3 家商店的列表。 我对项目进行了分组,但我不确定如何遍历给定的 Map 或条目集...
public class Shop {
int size;
String item;
String name;
public Shop(int size, String item, String name){
this.size = size;
this.item = item;
this.name = name;
}
//Return a list of the top 3 largest shops by item
public static void main(){
List<Shop> shops = new LinkedList<Shop>();
Comparator<Shop> shopComparator = new Comparator<Shop>(){
@Override
public int compare(Shop f1, Shop f2) {
return f1.getSize() < f2.getSize() ? 1 : -1;
}
};
shops.stream().collect(groupingBy(Shop::getItem))
.entrySet()
.stream()
.filter(entry -> entry.getValue().stream().map )
.forEach(item -> item.getValue())//Stuck here
;
}
}
【问题讨论】:
-
前 3 名是什么意思?你想得到特定的物品吗?或所有项目?,你能显示预期的输出吗?
-
这是一项需要使用
Stream的学校作业吗?当然可以,但对于大型数据集,使用堆比我想到的用于流的方法更有效,并且可能更具可读性。 -
@erickson 这不是学校作业 - 只是一个个人项目,并试图更好地掌握如何有效地使用流。
-
我对代码有点困惑, .stream().map 似乎是不完整的代码,也许是为了调用 map()?
-
@Gimby - 这就是我卡住的地方。我不确定如何处理 groupingBy 中的 Map 对象
标签: java java-8 java-stream