0 java lambda filter java-stream
我有一些城市的房屋清单。我正在尝试使用过滤器来生成每个城市最昂贵的房子的列表。我无法使用传统循环。
//This returns unique City Names
List unique = obList.stream()
.map(x -> x.getCity())
.distinct()
.sorted()
.collect(Collectors.toList());
//This returns the house with the highest price in that city
RAddress obReturn = obList.stream()
.filter(x -> x.getCity().equalsIgnoreCase(sName))
.sorted((x,y) -> (int)(y.getPrice() - x.getPrice()))
.findFirst()
.get();
Run Code Online (Sandbox Code Playgroud)
我知道以某种方式将这些结合起来对于解决这个问题是必要的,但我一生都无法弄清楚如何......
任何和所有的帮助表示赞赏。
使用groupingBy收集器将每个城市的所有房屋收集在一起;然后使用下游maxBy收集器保留每个城市中最昂贵的房子:
obList.stream()
.collect(
groupingBy(
x -> x.getCity(),
maxBy(comparing(x -> x.getPrice())))
Run Code Online (Sandbox Code Playgroud)
这将返回 a Map<CityType, Optional<HouseType>>( whereCityType和HouseTypeare 分别是城市和房屋的类型。
如果您想要 a Map<CityType, HouseType>(即没有Optional,因为您知道该值始终存在),请包装下游收集器:
collectingAndThen(maxBy(...), Optional::get)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |