我了解map
和flatten
操作可以合并到{1}},flatMap
和filter
合并到Scala中的map
。
我是否可以将collect
/ zip
与zipwithIndex
操作合并?
答案 0 :(得分:2)
据我所知,标准库中没有单个操作,但在各种元组上有一个扩展方法,称为zipped
。此方法返回一个对象,该对象提供map
和flatMap
等方法,这些方法将使用映射执行压缩:
(xs, ys).zipped.map((x, y) => x * y)
此对象也可以隐式转换为Traversable
,因此您可以调用更复杂的方法,例如mkString
或foldLeft
。
答案 1 :(得分:0)
如果由于某种原因,你真的想要一个组合版本,你可以自己写一个。
db.collection("groups").document(id.get(i)).collection("members")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
id.add(document.getId());
Log.e(Tag, document.getId() + " => " + document.getData());
if (task.getResult().isEmpty()) {
Log.d(Tag, "onSuccess: LIST EMPTY");
return;
} else {
// Convert the whole Query Snapshot to a list
// of objects directly! No need to fetch each
// document.
Log.e(Tag, task.getResult() + "");
typeAll = task.getResult().toObjects(GroupMembers.class);
}
}
} else {
Log.e(Tag, "Error getting documents: ", task.getException());
}
称之为:
implicit class SeqOps[A](s: Seq[A]) {
def zipWithIndex2[A1 >: A, B >: Int, That](f: (A, Int) => (A1, B))(implicit bf: CanBuildFrom[Seq[A], (A1, B), That]): That = {
val b = bf(s)
var i = 0
for (x <- s) {
b += f(x, i)
i += 1
}
b.result()
}
}
我真的会考虑过这两次,而且很可能会采用任何其他方法。