我是否需要创建流来生成范围内的列表?

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;
}

然后我想也许最好使用流来提供更清洁的解决方案。但是当我尝试 filteranyMatch.

时它不起作用
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.我应该更喜欢第二种方法,因为它看起来更干净吗?

  1. 像这样:
public static List<Integer> oddNumbers(final int l, final int r) {
  return IntStream.range(l, r + 1).filter(i -> i % 2 != 0).boxed().toList();
}
  1. 这是一个品味问题,但有人可能会争辩说使用流 API 的意图更清晰。

(toList() 是 Java 16 的新版本,否则必须使用 collect(Collectors.toList())