Filter 在Java8中,我可以将筛选列表作为筛选谓词的参数吗?
我正在尝试用Java8风格对Bob叔叔的主要因素Kata进行TDD。 我让代码正常工作了,我想通过只查看以前的素数而不是所有的数来添加一个改进来检查一个数是否为素数Filter 在Java8中,我可以将筛选列表作为筛选谓词的参数吗?,filter,java-8,Filter,Java 8,我正在尝试用Java8风格对Bob叔叔的主要因素Kata进行TDD。 我让代码正常工作了,我想通过只查看以前的素数而不是所有的数来添加一个改进来检查一个数是否为素数 public class PrimeFactorsGenerator { public static List<Integer> generate(int number) { return createListOfNumberUntil(number).stream().
public class PrimeFactorsGenerator {
public static List<Integer> generate(int number) {
return createListOfNumberUntil(number).stream().
filter(x -> isDivided(number, x)).
filter(x -> isPrime(x)).
collect(Collectors.toList());
}
private static boolean isPrime(Integer t) {
for (int i = 2; i < t; i++) {
if(isDivided(t, i)){
return false;
}
}
return true;
}
private static List<Integer> createListOfNumberUntil(int number) {
List<Integer> $ = Lists.newArrayList();
for (int i = 2; i <= number; i++) {
$.add(i);
}
return $;
}
private static boolean isDivided(int num, int i) {
return num % i == 0;
}
}
公共类PrimeFactorsGenerator{
公共静态列表生成(整数){
返回createListOfNumberUntil(number).stream()。
过滤器(x->isDivided(数字,x))。
过滤器(x->iPrime(x))。
collect(Collectors.toList());
}
私有静态布尔iPrime(整数t){
for(int i=2;i 对于(int i=2;我似乎想做这样的事情:请注意,创建一个数字的ArrayList
之后仅仅调用stream()
。使用IntStream.iterate(firstValue,i->i+1)
。或者您可以使用IntStream.range(从,到)
如果您知道上限。从iterate()
中拆分范围可能比拆分流更容易,因为传递给iterate()
的函数必须重复调用才能生成值,而range
中的值是虚拟的。