Tag: java stream

其他流的笛卡尔积的流,每个元素作为List?

如何使用Java 8实现一个函数来获取一些流,并生成一个流,其中每个元素都是一个由流的笛卡尔积的一个成员组成的列表? 我看过这个问题 – 这个问题使用了一个BinaryOperator的聚合BinaryOperator (取两个类似的类型并生成相同类型的项目)。 我希望最终结果中的项目是List而不是输入流中元素的类型。 具体而言,假设我所需的function称为product ,如下: Stream<List> result = product( Stream.of(“A”, “B”, “C”, “D”), Stream.of(“I”, “J”, “K), Stream.of(“Y”, “Z”) ); result.forEach(System.out::println); 应该打印: [A, I, Y] [A, I, Z] [A, J, Y] [A, J, Z] [A, K, Y] [A, K, Z] [B, I, Y] … [D, K, Y] [D, K, Z] 理想情况下,我希望这个操作尽可能地懒惰。 例如,如果输入流是由Stream.generate() […]

Java 8 findFirst()。isPresent()比count()> 0更有效吗?

鉴于我有一个Stream stream = list.stream().filter(some predicate) ,其中列表非常大,通过执行以下stream.count() > 0来检查流是否为空是更有效的: stream.count() > 0或通过执行: stream.findFirst().isPresent() ?

检测流中的重复组

我想确保列表中的所有数字都组合在一起。 让我用例子解释一下: {1, 1, 1, 2, 2} // OK, two distinct groups {1, 1, 2, 2, 1, 1} // Bad, two groups with “1” {1, 2, 3, 4} // OK, 4 distinct groups of size 1 {1, 1, 1, 1} // OK, 1 group {3, 4, 3} // Bad, two groups with “3” {99, -99, […]

Java 8流运行速度比for循环慢的关键指标?

在大多数情况下,Java 8流允许的代码比旧式for循环更具可读性。 但是,根据我自己的经验和我所读到的内容,使用流而不是for循环可能会导致性能损失(或偶尔会有改进),有时难以预测。 在一个大型项目中,为每个循环编写基准测试似乎不太可行,因此在决定是否用流替换for循环时,关键因素是什么 (例如,预期的集合大小,删除的值的预期百分比通过过滤,迭代操作的复杂性,减少或聚合的类型等,它们可能表明将导致的性能变化? 注意:这是我之前的问题的缩小,因为过于宽泛而关闭(并且并行流的方面在另一个SO问题中得到了很好的覆盖),所以让我们将其限制为顺序流。

使用java 8流将String替换为hashmap值

我有String和HashMap如下面的代码: Map map = new HashMap(); map.put(“ABC”, “123”); String test = “helloABC”; map.forEach((key, value) -> { test = test.replaceAll(key, value); }); 我尝试用HashMap值替换字符串,但这不起作用,因为test是最终的,不能在forEach的主体中重新分配。 那么有没有使用Java 8 Stream API用HashMap替换String解决方案?

如何使用Lambda Expression获得单词平均长度

我有一个单词列表文本文件,我想从该文件中获取最小,最大和平均单词长度。 我有一个流方法: public static Stream readWords(String filename) { try { BufferedReader reader = new BufferedReader(new FileReader(filename)); Stream stringStream = reader.lines(); return stringStream; } catch (IOException exn) { return Stream.empty(); } } 在我的主要测试方法中,我打印最大和最小 System.out.println(readWords(filename) .min(Comparator.comparing(s -> s.length())) .get() .length() ); System.out.println(readWords(filename) .max(Comparator.comparing(s -> s.length())) .get() .length() ); 它按预期工作。 问题: 是否有可能像我在min和max中那样得到单词长度的平均值? 在是或否的情况下,如何做到这一点(仅作为Lambda表达式)?

Java流减少

我有以下示例数据集,我想根据方向的值使用Java流api进行转换/缩减 Direction int[] IN 1, 2 OUT 3, 4 OUT 5, 6, 7 IN 8 IN 9 IN 10, 11 OUT 12, 13 IN 14 至 Direction int[] IN 1, 2, OUT 3, 4, 5, 6, 7 IN 8, 9, 10, 11 OUT 12, 13 IN 14 到目前为止我写的代码 enum Direction { IN, OUT } class […]

Java 8对静态方法与实例方法的引用

说我有以下代码 public class A { int x; public boolean is() {return x%2==0;} public static boolean is (A a) {return !a.is();} } 而在另一堂课…… List a = … a.stream().filter(b->b.isCool()); a.stream().filter(A::is); //would be equivalent if the static method is(A a) did not exist 问题是如何使用A :: is类型表示法引用实例方法版本? 非常感谢

如何使用Java 8 Stream将Array转换为HashMap

我正在编写一个函数,使用Java 8 Stream将数组转换为Map。 这就是我想要的 public static Map toMap(Object… entries) { // Requirements: // entries must be K1, V1, K2, V2, …. ( even length ) if (entries.length % 2 == 1) { throw new IllegalArgumentException(“Invalid entries”); } // TODO Arrays.stream(entries).???? } 有效的用法 Map map1 = toMap(“k1”, 1, “k2”, 2); Map map2 = toMap(“k1”, “v1”, “k2”, […]

来自并行流中的I / O代码的SecurityException

我无法解释这一点,但我在其他人的代码中发现了这种现象: import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; import java.util.stream.Stream; import org.junit.Test; public class TestDidWeBreakJavaAgain { @Test public void testIoInSerialStream() { doTest(false); } @Test public void testIoInParallelStream() { doTest(true); } private void doTest(boolean parallel) { Stream stream = Stream.of(“1”, “2”, “3”); if (parallel) { stream = stream.parallel(); } stream.forEach(name -> { try { Files.createTempFile(name, “.dat”); } […]