gpt4 book ai didi

java - 带有 Consumer 或 Filter 的 Java8 List 的条件,哪种方式更好

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:43:54 27 4
gpt4 key购买 nike

我试过了

    List<Integer> numbers = Arrays.asList(1, 1, 0, -1, -1);
List<Integer> positiveNum2 = new ArrayList<>();
List<Integer> negativeNum2 = new ArrayList<>();
List<Integer> zeroNumbers2 = new ArrayList<>();
List<Integer> positiveNumbers = numbers.stream().filter(number -> number > 0).collect(Collectors.toList());
List<Integer> negativeNumbers = numbers.stream().filter(number -> number < 0).collect(Collectors.toList());
List<Integer> zeroNumbers = numbers.stream().filter(number -> number.equals(0)).collect(Collectors.toList());
positiveNumbers.forEach(System.out::println);
negativeNumbers.forEach(System.out::println);
zeroNumbers.forEach(System.out::println);
System.out.println("*********with Consumer******************");
Consumer<Integer> determineNumber = number -> {
if (number > 0) {
positiveNum2.add(number);
} else if (number < 0) {
negativeNum2.add(number);
} else {
zeroNumbers2.add(number);
}

};
numbers.forEach(determineNumber);
positiveNum2.forEach(System.out::println);
negativeNum2.forEach(System.out::println);
zeroNumbers2.forEach(System.out::println);

但是我不知道哪个更好,我觉得是forEach和Consumer,但是Consumer做了三个验证,所以,没有单一职责

最佳答案

我通常更喜欢您基于 Consumer 的解决方案,因为它至少将整个操作封装在一个调用/流中。但我认为您还没有充分利用流的功能方法。

您可以使用简单的流/收集来实现这种排序:

numbers .stream()
.collect(Collectors.groupingBy(Math::signum));

将产生这样的 map :

{1.0=[1], 0.0=[0, 0], -1.0=[-1, -2, -1]}

这种方法避免了副作用(即不修改流范围之外的列表),因此可以更容易地提取并且很容易并行运行。

关于java - 带有 Consumer 或 Filter 的 Java8 List 的条件,哪种方式更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56928154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com