当前位置: 首页 > 知识库问答 >
问题:

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

邢浩邈
2023-03-14

在Scala中,有一个看起来像这样的方法。

List[(A, B)] = List.fill(n)(doSomething(arg))

我的问题是,是否有任何方法可以在Java中做到这一点,或者它是否必须通过一系列冗长的s来完成,你有什么。

Java确实有Collesions.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))
}

对我来说,这在Java似乎是不可能实现的,或者从我对Java的了解或到目前为止我在留档中找到的情况来看,这是不可能实现的。

这段Scala代码可以在保罗·丘萨纳和罗纳·比雅纳松的《Scala函数式编程》第7页找到。

共有3个答案

刘承悦
2023-03-14

格式简单:

ArrayList<Coffee> array = new ArrayList<Coffee>();
// array.add("Coffe Expresso") ...
CreditCard cc = new CreditCard("1234 4321 1234 4321");
for(Coffee obj : array){
   obj = new Coffee("Coffee - no sugar");
   buyCoffee(obj, cc);
}

public void buyCoffee(Coffee coffee, CreditCard cc){
    //...
}
戚飞
2023-03-14

有一个用于创建小型集合的 JEP,或者该问题更易于阅读。

它显示了几个习惯用法,其中一个使用了初始值设定项。Java 8版本的<code>填充<code>:

import java.util.*;
import java.util.function.*;

public class j {
  public static <T> List<T> fill(int n, Function<Integer, T> f) {
    return Collections.unmodifiableList(new ArrayList<T>(n) {{
      for (int i = 0; i < n; i++) add(f.apply(i));
    }});
  }
  public static void main(String[] args) {
    List<Integer> values = fill(10, i -> 2 * i);
    for (int x : values) System.out.println(x);
  }
}

我没有为其他便利寻找JEP,但很明显,这些API是他们的心头好。

宗波涛
2023-03-14

Java 8有一个等价物:

    < li >使用流生成序列 < li >对于序列的每个值,使用您想要的任何方法进行映射 < li >收集结果

示例:

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

public Result doSomething(Integer i) {
  return ...;
}
 类似资料:
  • java.util.zip.ZipOutputStream.setMethod(int method)方法为后续条目设置默认压缩方法。 只要没有为单个ZIP文件条目指定压缩方法,就会使用此默认值,并且最初设置为DEFLATED。 声明 (Declaration) 以下是java.util.zip.ZipOutputStream.setMethod(int method)方法的声明。 public

  • 描述 (Description) java.util.zip.ZipEntry.setMethod(int method)方法设置条目的压缩方法。 声明 (Declaration) 以下是java.util.zip.ZipEntry.setMethod(int method)方法的声明。 public void setMethod(int method) 参数 (Parameters) meth

  • 问题内容: Java是否具有等效于Python 方法的方法? 问题答案: Guava还提供类似于Python的东西: 您也可以使用Guava的AbstractIterator实现一个相当简单的迭代器来执行相同的操作:

  • 问题内容: 我正在尝试实现一个现有的网络协议,该协议大量使用了Java不支持的Unsigned数据类型。我目前对每种数据类型执行的操作是,选择下一个更大的数据类型,以使无符号数字适合正数区域,然后使用字节移位获得所需的效果。由于这很容易出错,并且长期以来无符号,我必须使用比扩展类型重得多的BigInteger,我想知道是否有更好的方法来实现这一点? 问题答案: 根据您的工作,您可以将long视为6

  • 问题内容: 我刚刚开始使用Java 8,并且想知道是否有一种方法可以编写返回a的方法。 现在我有如下方法: 有没有一种方法可以更简洁地用Java 8编写代码?我希望这可以工作,但不能: 问题答案: 摆脱函数定义内的return语句:

  • 当我尝试添加带有自定义_id字段的文档时,我在使用MongoDBJava时遇到了问题。当我向该集合插入新文档时,如果文档_id已经存在,我想忽略它。 在Mongo shell中,在这种情况下可以使用collection.save(),但是我找不到与MongoDB java驱动程序等效的方法。 仅举一个例子: 我有一个包含网站信息的文档集合,其中URL作为_id字段(这是唯一的) 我想添加更多文档。