我是否需要创建流来生成范围内的列表?
Do I need to create stream for generating a list in range?
我是 Java Stream API 的新手,正在尝试解决一些练习。在一个问题中,我需要 return 奇数作为给定范围的 List<Integer>
。首先,我使用了一个循环,如下所示:
public static List<Integer> oddNumbers(int l, int r) {
List<Integer> list = new ArrayList<>();
for (int i = l; i <= r; i++) {
if (i % 2 != 0) {
list.add(i);
}
}
return list;
}
然后我想也许最好使用流来提供更清洁的解决方案。但是当我尝试 filter
和 anyMatch
.
时它不起作用
public static List<Integer> oddNumbers(int l, int r) {
return IntStream.range(l,r)
.filter(x -> x % 2 != 0)
// .anyMatch(x -> x % 2 == 0)
.collect(Collectors.toList());
}
所以:
1.如何使用流使其工作?
2.我应该更喜欢第二种方法,因为它看起来更干净吗?
- 像这样:
public static List<Integer> oddNumbers(final int l, final int r) {
return IntStream.range(l, r + 1).filter(i -> i % 2 != 0).boxed().toList();
}
- 这是一个品味问题,但有人可能会争辩说使用流 API 的意图更清晰。
(toList()
是 Java 16 的新版本,否则必须使用 collect(Collectors.toList())
我是 Java Stream API 的新手,正在尝试解决一些练习。在一个问题中,我需要 return 奇数作为给定范围的 List<Integer>
。首先,我使用了一个循环,如下所示:
public static List<Integer> oddNumbers(int l, int r) {
List<Integer> list = new ArrayList<>();
for (int i = l; i <= r; i++) {
if (i % 2 != 0) {
list.add(i);
}
}
return list;
}
然后我想也许最好使用流来提供更清洁的解决方案。但是当我尝试 filter
和 anyMatch
.
public static List<Integer> oddNumbers(int l, int r) {
return IntStream.range(l,r)
.filter(x -> x % 2 != 0)
// .anyMatch(x -> x % 2 == 0)
.collect(Collectors.toList());
}
所以: 1.如何使用流使其工作?
2.我应该更喜欢第二种方法,因为它看起来更干净吗?
- 像这样:
public static List<Integer> oddNumbers(final int l, final int r) {
return IntStream.range(l, r + 1).filter(i -> i % 2 != 0).boxed().toList();
}
- 这是一个品味问题,但有人可能会争辩说使用流 API 的意图更清晰。
(toList()
是 Java 16 的新版本,否则必须使用 collect(Collectors.toList())