【发布时间】:2019-07-08 03:41:42
【问题描述】:
我试过了
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做了三个验证,因此,没有单一的责任
【问题讨论】:
-
它确实有一个单一的职责,即根据符号将数字分成三个列表。消费者只需要一次迭代,因此效率更高。我只是为此使用一个简单的
for循环...... -
我同意这个简单的
for循环。 --- 我很好奇:为什么是number.equals(0)而不是number == 0? -
@Andress 因为
==用于检查对象的引用,而不是值。而equals用于compare对象的值。这里的数字是Integer class的List,这就是为什么在这里使用equals。 -
@DhrumiPatel 我想你会发现
==在这里非常好。谈论“对象的引用”是解释==实际作用的一种非常令人困惑的方式。 -
@DhrumiPatel 这不适用于这里。当您使用
==将Integer与int进行比较时,Integer将被取消装箱,并且您会得到一个值比较。
标签: java foreach java-8 java-stream consumer