小编Sea*_*der的帖子

布尔值流,是真的吗?

我想使用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 parallel-processing lambda java-8 java-stream

49
推荐指数
3
解决办法
4万
查看次数

如何使用Stream API Java 8生成随机数组的int?

我试图在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 arrays java-8 java-stream

23
推荐指数
3
解决办法
2万
查看次数

Java8:使用流将一个映射转换为另一个映射

我需要将Java转换HashMapTreeMap(包括地图内容)的实例

HashMap<String, Object> src = ...;
TreeMap<String, Object> dest = src.entrySet().stream()
        .filter( ... )
        .collect(Collectors.toMap( ???, ???, ???, TreeMap::new));
Run Code Online (Sandbox Code Playgroud)

我应该用什么来代替???使这些代码可编辑?

java lambda java-8 java-stream

20
推荐指数
1
解决办法
2万
查看次数

添加参数后,覆盖具有泛型返回类型的方法失败

我想知道为什么这是一个有效的覆盖:

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的签名的子签名,如果:

  • m2与m1具有相同的签名,或
  • m1的签名与m2签名的擦除(§4.6)相同.

因此它似乎B.getSupplier …

java generics overriding

17
推荐指数
1
解决办法
234
查看次数

是否有可能在java 8中执行一个懒惰的groupby,返回一个流?

我有一些大型的文本文件,我想通过对其行进行分组来处理.

我尝试使用新的流媒体功能,比如

return FileUtils.readLines(...) 
            .parallelStream()
            .map(...)
            .collect(groupingBy(pair -> pair[0]));
Run Code Online (Sandbox Code Playgroud)

问题是,AFAIK,这会生成一个Map.

是否有任何方法可以像上面那样生成高级代码,例如,条目流?

更新:我正在寻找的是像python的itertools.groupby.我的文件已经排序(通过pair [0]),我只想逐个加载组.

我已经有了一个迭代解决方案.我只是想知道是否有更多的声明方式来做到这一点.顺便说一句,使用番石榴或其他第三方图书馆不会是一个大问题.

java lazy-loading java-8 java-stream

5
推荐指数
1
解决办法
921
查看次数

我和for stream有不同的结果,为什么?

我有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 for-loop java-8 java-stream

1
推荐指数
1
解决办法
71
查看次数