在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页找到。
格式简单:
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){
//...
}
有一个用于创建小型集合的 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是他们的心头好。
Java 8有一个等价物:
示例:
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字段(这是唯一的) 我想添加更多文档。