如何在Scala中基于元素索引获取列表中的一组元素?

如何在Scala中基于元素索引获取列表中的一组元素?,scala,Scala,我有一个列表,另一个列表包含我感兴趣的索引。e、 g val a=List("a","b","c","d") val b=List(2,3) 然后我需要返回一个值为list(“b”,“c”)的列表,因为list(2,3)表示我喜欢从元素“a”中获取第二个和第三个元素。如何做到这一点?我喜欢我的表达式在代码中的顺序来反映求值的顺序,所以我喜欢使用scalaz管道操作符来做这类事情|> val results = b.map(i => a(i - 1)) b.map(_ - 1 |>

我有一个列表,另一个列表包含我感兴趣的索引。e、 g

val a=List("a","b","c","d")
val b=List(2,3)

然后我需要返回一个值为list(“b”,“c”)的列表,因为list(2,3)表示我喜欢从元素“a”中获取第二个和第三个元素。如何做到这一点?

我喜欢我的表达式在代码中的顺序来反映求值的顺序,所以我喜欢使用scalaz管道操作符来做这类事情
|>

val results = b.map(i => a(i - 1))
b.map(_ - 1 |> a)

当一个人习惯于编写bash脚本时,这是非常自然的。

考虑一下这个
应用
方法,它可以检查(避免)可能的
索引自动边界异常

implicit class FetchList[A](val in: List[A]) extends AnyVal { 
  def apply (idx: List[Int]) = for (i <- idx if i < in.size) yield in(i-1) 
}

如何在java中实现它?@OliviaWang-在java 8中类似于
List results=b.stream().select(i->a.get(i)).collector(Collectors.toList())应该可以工作。在java 7及以下版本中,您需要为
使用一个
列表结果=new ArrayList();对于(整数i:b){results.add(a.get(i));}
非常感谢,我想在O(n)中这样做。
a(b)
res: List[String] = List(b, c)