是否有一个像sortWith函数一样工作的本机分组函数?

时间:2016-03-10 06:10:45

标签: scala

有一些库,如Spark和其他Scala扩展,其中包含" groupWith"功能可用。此函数允许您将元素与集合的其余部分进行比较,然后使用一个或多个谓词对其进行分组。在Scala中似乎没有任何本机功能,但它们确实具有行为类似的sortWith函数,但只对项目进行排序而不是对它们进行分组。如果解释不充分,那么一个小代码示例应该显示我想要做的事情:

val list = List(1,2,3,4,5,5)
val groupedList = list.groupWith{ (e,c) =>
    e == c
}

这是一个非常简单的例子,我想进行更复杂的比较,例如

e + 1 == c

所以问题是,是否有任何本机Scala函数执行此操作?有任何建议或解决方法吗?

更新 从给出的简单示例来看,似乎并不完全清楚我想要做什么,这里有一个更好的例子: 假设我有一个案例类和这些对象的列表:

case class Item(num: Int, color: String)
val list = List(new Item(13, "red"), new Item(14,"red"), new Item(15, "blue"), new Item(16, "red"))

list.groupWith{ (e,c) =>
    (e.num -1 == c.num || e.num + 1 == c.num ) && e.color == c.color        
}

这应该是这样的:

res8: List[List[Item]] = List(List(Item(13,red), Item(14,red)), List(Item(15,blue)), List(Item(16,red)))

2 个答案:

答案 0 :(得分:2)

这是一个实现:

List<Model>listobj=new Arraylist<>();
listobj = account_sf_db.list();
                accountListAdapter = new AccountListAdapter(listobj, getApplicationContext());
                recyclerView.setAdapter(accountListAdapter);
                accountListAdapter.notifydatasetchanger();

答案 1 :(得分:1)

不确定这是否是您想要的(查看我对您的问题的评论),但GenTraversableLike中定义的方法groupBy List继承(不仅是List)。你会得到:

scala> val list = List(1,2,3,4,5,5)
list: List[Int] = List(1, 2, 3, 4, 5, 5)

scala> list.groupBy( el => el )
res0: scala.collection.immutable.Map[Int,List[Int]] = Map(5 -> List(5, 5), 1 -> List(1), 2 -> List(2), 3 -> List(3), 4 -> List(4))

scala> list.groupBy( el => el + 1 )
res1: scala.collection.immutable.Map[Int,List[Int]] = Map(5 -> List(4), 6 -> List(5, 5), 2 -> List(1), 3 -> List(2), 4 -> List(3))

基本上你需要提供从值到键的鉴别器功能,你将获得Map[Key, List[Value]

这是你想要的吗?