我想使用parallelStream并行化以下代码:
boolean anyTrue() {
for (Element e : setOfE) {
if (eval(e)) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
以下是否可以在并行流上使用并定期进行短路评估?
setOfE.parallelStream().map(e -> eval(e)).reduce(false, (a,b) -> a || b))
Run Code Online (Sandbox Code Playgroud) 我试图在Java 8中使用新的Stream API生成随机的整数数组.但我还没有清楚地理解这个API.所以我需要帮助.这是我的代码.
Random random = new Random();
IntStream intStream = random.ints(low, high);
int[] array = intStream.limit(limit) // Limit amount of elements
.boxed() // cast to Integer
.toArray();
Run Code Online (Sandbox Code Playgroud)
但是这段代码返回了一些对象.这有什么问题?
我需要将Java转换HashMap为TreeMap(包括地图内容)的实例
HashMap<String, Object> src = ...;
TreeMap<String, Object> dest = src.entrySet().stream()
.filter( ... )
.collect(Collectors.toMap( ???, ???, ???, TreeMap::new));
Run Code Online (Sandbox Code Playgroud)
我应该用什么来代替???使这些代码可编辑?
我想知道为什么这是一个有效的覆盖:
public abstract class A {
public abstract <X> Supplier<X> getSupplier();
public static class B extends A {
@Override
public Supplier<String> getSupplier() {
return String::new;
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
public abstract class A {
public abstract <X> Supplier<X> getSuppliers(Collection<String> strings);
public static class B extends A {
@Override
public Supplier<String> getSuppliers(Collection<String> strings) {
return String::new;
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据JLS§8.4.8.1,B.getSupplier必须是一个副主题A.getSupplier:
在类C中声明或继承的实例方法mC,覆盖C类中声明的另一个方法mA,iff以下所有条件都为真:
- ...
- mC的签名是mA签名的子签名(§8.4.2).
- ...
Subsignatures定义在JLS§8.4.2:
两种方法或构造,M和N,具有相同的签名,如果它们具有相同的名称,相同类型的参数(如果有的话)(§8.4.4),并且,调整所述形参类型的N到所述类型参数后M,相同的形式参数类型.
方法m1的签名是方法m2的签名的子签名,如果:
因此它似乎B.getSupplier …
我有一些大型的文本文件,我想通过对其行进行分组来处理.
我尝试使用新的流媒体功能,比如
return FileUtils.readLines(...)
.parallelStream()
.map(...)
.collect(groupingBy(pair -> pair[0]));
Run Code Online (Sandbox Code Playgroud)
问题是,AFAIK,这会生成一个Map.
是否有任何方法可以像上面那样生成高级代码,例如,条目流?
更新:我正在寻找的是像python的itertools.groupby.我的文件已经排序(通过pair [0]),我只想逐个加载组.
我已经有了一个迭代解决方案.我只是想知道是否有更多的声明方式来做到这一点.顺便说一句,使用番石榴或其他第三方图书馆不会是一个大问题.
我有Flyweight模式,我尝试将循环转换为流,但结果是不同的:
public Line getLine(Color color) {
for(Line line: pool) {
if(line.getColor().equals(color)) {
return line;
}
}
return createLine(color);
}
factory.getLine(Color.RED);
factory.getLine(Color.RED);
System.out.println(getPool().size()); // print 1
Run Code Online (Sandbox Code Playgroud)
重构代码:
public Line getLine(Color color) {
return pool.stream()
.filter(l -> l.getColor().equals(color))
.findFirst()
.orElse(createLine(color));
}
factory.getLine(Color.RED);
factory.getLine(Color.RED);
System.out.println(getPool().size()); // print 2
Run Code Online (Sandbox Code Playgroud)
流有什么问题?
java ×6
java-8 ×5
java-stream ×5
lambda ×2
arrays ×1
for-loop ×1
generics ×1
lazy-loading ×1
overriding ×1