标签: java-stream

从 Java 16 开始,何时以及如何在 flatMap 上执行从 Stream mapMulti 到 0..n 的映射

我一直在浏览 Java 16 的新闻和源代码,并且遇到了名为mapMulti. 早期访问的JavaDoc说它类似于flatMap并且已经被批准用于完全相同的 Java 版本。

<R> Stream<R> mapMulti?(BiConsumer<? super T,?? super Consumer<R>> mapper)
Run Code Online (Sandbox Code Playgroud)
  • 如何使用此方法执行一对 0..n 映射?
  • 新方法如何工作以及它与flatMap. 什么时候最好?
  • mapper可以调用多少次?

java java-stream flatmap java-16 mapmulti

22
推荐指数
2
解决办法
1147
查看次数

IntStream 导致数组元素被错误地设置为 0(JVM 错误,Java 11)

在P下面的类中,该方法test似乎返回相同false:

import java.util.function.IntPredicate;
import java.util.stream.IntStream;

public class P implements IntPredicate {
    private final static int SIZE = 33;

    @Override
    public boolean test(int seed) {
        int[] state = new int[SIZE];
        state[0] = seed;
        for (int i = 1; i < SIZE; i++) {
            state[i] = state[i - 1];
        }
        return seed != state[SIZE - 1];
    }

    public static void main(String[] args) {
        long count = IntStream.range(0, 0x0010_0000).filter(new P()).count();
        System.out.println(count);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,将 classP与结合使用 …

java arrays simd java-stream java-11

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

为什么在发出终端操作后没有Java close()流?

在阅读了https://www.airpair.com/java/posts/spring-streams-memory-efficiency之后,我很想从数据库中传出结果,但正如我与同事讨论的那样(cfr.评论他补充说文章),需要记住使用try-with-resources构造来避免任何内存泄漏.

  1. 为什么Java 8库不会在每次终端操作后自行关闭流(不必在try-with-resources中包装流实例化)?
  2. 如果适用,是否有任何将此功能添加到Java的计划,或者请求它是否有意义?

java java-8 java-stream

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

在给定Charset的情况下将InputStream转换为Stream <String>

我想以一种由线条组成的方式将InputStream isa 转换为Stream<String> stream给定的a .此外,不应立即读取一行,但仅在需要时才读取.Charset csstreamisisstream

java io stream java-8 java-stream

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

用于Guava不可变集合的Java 8收集器?

我非常喜欢Java 8流和Guava的不可变集合,但我无法弄清楚如何将两者结合使用.

例如,如何实现将流结果收集到ImmutableMultimap中的Java 8 Collector?

加分点:我希望能够提供键/值映射器,类似于Collectors.toMap()的工作方式.

java guava java-stream

21
推荐指数
3
解决办法
5591
查看次数

Java 8 Stream - .max()带有重复项

所以我有一组对象,它们的步长变量可以是1到4.

public class MyClass {
    private Long step;

    //other variables, getters, setters, etc.
}
Run Code Online (Sandbox Code Playgroud)

Collection<MyClass> myOjbects = /*get collection*/;

然后我想MyClass从集合中获得具有最大步长值的一个实例,所以我这样做:

final Optional<MyClass> objectWithMaxStep =
   myObjects.stream().max(Comparator.comparing(MyClass::getStep));
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况MyClass下,集合中将有多个实例,其步长等于4.

所以,我的问题是,如何确定返回哪个实例Optional,或者当流中的多个对象具有要比较的最大值时是否抛出异常?

该max()函数的Java 8文档未指定在这种情况下将发生的情况.

java java-8 java-stream

21
推荐指数
2
解决办法
5781
查看次数

Java - 使用Condition和Lambda在Array中查找元素

简而言之,我有这个代码,我想使用条件和lambda获取数组的特定元素.代码将是这样的:

Preset[] presets = presetDALC.getList();
Preset preset = Arrays.stream(presets).select(x -> x.getName().equals("MyString"));
Run Code Online (Sandbox Code Playgroud)

但显然这不起作用.在C#中会有类似的东西,但在Java中,我该怎么做?

java arrays lambda java-8 java-stream

21
推荐指数
3
解决办法
6万
查看次数

Java 8流条件处理

我有兴趣将一个流分成两个或多个子流,并以不同的方式处理这些元素.例如,(大)文本文件可能包含类型A的行和类型B的行,在这种情况下,我想要执行以下操作:

File.lines(path)
.filter(line -> isTypeA(line))
.forEachTrue(line -> processTypeA(line))
.forEachFalse(line -> processTypeB(line))
Run Code Online (Sandbox Code Playgroud)

以前是我试图抽象的情况.实际上我有一个非常大的文本文件,其中每一行都在测试正则表达式; 如果该行通过,则处理它,而如果它被拒绝,那么我想更新一个计数器.对拒绝字符串的进一步处理是我不仅仅使用的原因filter.

是否有任何合理的方法可以使用流来执行此操作,还是必须回退到循环?(我希望这也是并行运行,所以溪流是我的第一选择).

java java-8 java-stream

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

Stream.findFirst与Optional.of不同?

可以说我有两个类和两个方法:

class Scratch {
    private class A{}
    private class B extends A{}

    public Optional<A> getItems(List<String> items){
        return items.stream()
             .map(s -> new B())
             .findFirst();
    }

    public Optional<A> getItems2(List<String> items){
        return Optional.of(
            items.stream()
                 .map(s -> new B())
                 .findFirst()
                 .get()
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么getItems2编译时getItems会出现编译器错误

incompatible types: java.util.Optional<Scratch.B> cannot be converted to java.util.Optional<Scratch.A>
Run Code Online (Sandbox Code Playgroud)

所以,当我返回get的值和使用编译器再次包装它时,会识别继承,但如果我直接使用结果,则不会.OptionalfindFirstOptional.offindFirst

java optional java-stream

21
推荐指数
3
解决办法
793
查看次数

reduce()方法在Java 8中如何工作?

我试图了解该reduce()方法如何在。

例如,我有以下代码:

public class App {

    public static void main(String[] args) {
        String[] arr = {"lorem", "ipsum", "sit", "amet"};
        List<String> strs = Arrays.asList(arr);

        int ijk = strs.stream().reduce(0, 
            (a, b) -> { 
                System.out.println("Accumulator, a = " + a + ", b = " + b);
                return a + b.length();
            },
            (a, b) -> {
                System.out.println("Combiner");
                return a * b;
            });
        System.out.println(ijk); 
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

Accumulator, a = 0, b = lorem
Accumulator, a = 5, b = …
Run Code Online (Sandbox Code Playgroud)

java reduce java-8 java-stream

21
推荐指数
4
解决办法
1739
查看次数

标签 统计

java ×10

java-stream ×10

java-8 ×6

arrays ×2

flatmap ×1

guava ×1

io ×1

java-11 ×1

java-16 ×1

lambda ×1

mapmulti ×1

optional ×1

reduce ×1

simd ×1

stream ×1