有一些库,如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)))
答案 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]
。
这是你想要的吗?