Java 如何在Scala中使用HashMap按唯一键过滤重复项?
我通过创建一个复合字符串键(SaleType+SaleDate),在Java中实现了一个简单的过滤方法。然后,我只是将每次销售按其唯一的键放入一个HashMap。因此,我有一个HashMap,其中sales由SaleType+SaleDate键过滤 我最近开始学习Scala,并想用它尝试同样的过滤逻辑。如何使用Scala opportunities实现这一点?我想可以使用Java 如何在Scala中使用HashMap按唯一键过滤重复项?,java,scala,Java,Scala,我通过创建一个复合字符串键(SaleType+SaleDate),在Java中实现了一个简单的过滤方法。然后,我只是将每次销售按其唯一的键放入一个HashMap。因此,我有一个HashMap,其中sales由SaleType+SaleDate键过滤 我最近开始学习Scala,并想用它尝试同样的过滤逻辑。如何使用Scala opportunities实现这一点?我想可以使用过滤器方法。但是如何从Sale对象构造一个字符串键,然后将其放入uniqueSalesMap private static L
过滤器方法。但是如何从Sale对象构造一个字符串键,然后将其放入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());
}
私有静态列表getUniqueSales(列表销售){
Map uniqueSalesMap=Maps.newHashMap();
销售(销售:销售){
字符串saleKey=sale.getSaleType()+sale.getSaleDate();
uniqueSalesMap.put(saleKey,销售);
}
返回新的ArrayList(uniqueSalesMap.values());
}
以下是一种相对简洁的方法,可以避免构建任何中间映射:
import collection.breakOut
val m: Map[String, Sale] =
(for (s <- sales) yield (s.getSaleType + s.getSaleDate, s))(breakOut)
m.values.toList
import collection.breakOut
val m:Map[字符串,销售]=
(对于(s),这里有一种相对简洁的方法,可以避免构建任何中间映射:
import collection.breakOut
val m: Map[String, Sale] =
(for (s <- sales) yield (s.getSaleType + s.getSaleDate, s))(breakOut)
m.values.toList
import collection.breakOut
val m:Map[字符串,销售]=
(因为(s这是你想要的,但不是你想要的方式,所以我不确定这算不算答案
sales.map(s => s.saleType + s.saleDate).distinct
这是你想要的,但不是你想要的方式,所以我不确定这是否算是一个答案
sales.map(s => s.saleType + s.saleDate).distinct
一种方法是使用groupBy
sales.groupBy(s=>s.salesType +s.saleDate).values.map(_.head)
一种方法是使用groupBy
sales.groupBy(s=>s.salesType +s.saleDate).values.map(_.head)
@Andreytukin抱歉,这是一个打字错误)可能重复的@Andreytukin抱歉,这是一个打字错误)可能重复的