List.fill(int)(method())在Java中是等价的吗?

m48*_*482 5 java scala function list

在Scala中,有一种方法看起来像这样.

List[(A, B)] = List.fill(n)(doSomething(arg))
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果有任何方法可以在Java中执行此操作,或者是否必须通过一系列冗长for的操作完成此操作,那么您有什么用.

Java确实有,Collections.fill但它似乎没有做我想要它做的事情.

Scala实现如下:

def buyCoffee(cc: CreditCard): (Coffee, Charge) =
{
    val cup = new Coffee()
    (cup, Charge(cc, cup.price))
}
def buyCoffees(cc: CreditCard, n: Int): (List[Coffee], Charge) =
{
    val p: List[(Coffee, Charge)] = List.fill(n)(buyCoffee(cc))
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这在Java中似乎是不可能实现的,或者不是我所知道的Java或者迄今为止我在文档中找到的内容.

这个Scala代码可以 Paul Chiusana和RúnarBjarnason的Scala函数编程的第7页中找到.

Arn*_*lle 6

与Java 8相同:

  • 使用Stream生成序列
  • 对于序列的每个值,使用您想要的任何方法映射它
  • 收集结果

示例:

List<Result> collect = IntStream.range(0, 5)
                      .mapToObj(i -> doSomething(i))
                      .collect(Collectors.toList());

public Result doSomething(Integer i) {
  return ...;
}
Run Code Online (Sandbox Code Playgroud)