我已经通过创建复合字符串键(SaleType + SaleDate)在Java中实现了一种简单的过滤方法。然后,我将每个销售通过其唯一的密钥放入HashMap。结果,我有一个HashMap,其销售额由SaleType + SaleDate键过滤。我最近开始学习Scala,并希望尝试相同的过滤逻辑。如何使用Scala机会实现这一目标?我想filter可以使用一种方法。但是,如何从Sale对象构造一个String键,然后将其放入uniqueSalesMap?private static List<Sale> getUniqueSales(List<Sale> sales) { Map<String, Sale> uniqueSalesMap = Maps.newHashMap(); for (Sale sale : sales) { String saleKey = sale.getSaleType() + sale.getSaleDate(); uniqueSalesMap.put(saleKey, sale); } return new ArrayList<Sale>(uniqueSalesMap.values());}
3 回答
![?](http://img1.sycdn.imooc.com/54584ed2000152a202200220-100-100.jpg)
MMMHUHU
TA贡献1834条经验 获得超8个赞
这是一种避免构建任何中间Map的相对简洁的方法:
import collection.breakOut
val m: Map[String, Sale] =
(for (s <- sales) yield (s.getSaleType + s.getSaleDate, s))(breakOut)
m.values.toList
但老实说,与原始Java代码相比,我看不出太多优势。你可能已经写了
val m = collection.mutable.HashMap.empty[String, Sale]
for (s <- sales) {
m(s.getSaleType + s.getSaleDate) = s
}
m.values.toList
对我来说似乎还不那么清楚。
![?](http://img1.sycdn.imooc.com/5333a0780001a6e702200220-100-100.jpg)
烙印99
TA贡献1829条经验 获得超13个赞
这可以实现您想要的功能,但不会以您想要的方式进行,因此我不确定它是否可以作为答案。
sales.map(s => s.saleType + s.saleDate).distinct
添加回答
举报
0/150
提交
取消