如何在Scala中使用HashMap通过唯一键过滤重复项?

我已经通过创建复合字符串键(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());

}


忽然笑
浏览 252回答 3
3回答

茅侃侃

一种方法是使用&nbsp;groupBysales.groupBy(s=>s.salesType&nbsp;+s.saleDate).values.map(_.head)

MMMHUHU

这是一种避免构建任何中间Map的相对简洁的方法:import collection.breakOutval m: Map[String, Sale] =&nbsp;&nbsp; (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) {&nbsp; m(s.getSaleType + s.getSaleDate) = s}m.values.toList对我来说似乎还不那么清楚。

烙印99

这可以实现您想要的功能,但不会以您想要的方式进行,因此我不确定它是否可以作为答案。sales.map(s&nbsp;=>&nbsp;s.saleType&nbsp;+&nbsp;s.saleDate).distinct
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java