使用 Lambda 的 Java 8 Filter Array

2022-08-31 11:23:32

我有一个,我想在一行中过滤掉(创建一个没有的新数组)负值而不添加循环。使用 Java 8 lambda 表达式是否可以实现?double[]for

在python中,它将是使用生成器的:

[i for i in x if i > 0]

在Java 8中是否有可能做一些类似简洁的事情?


答案 1

是的,您可以通过从数组创建一个,过滤掉负片,然后将流转换回数组来执行此操作。下面是一个示例:DoubleStream

double[] d = {8, 7, -6, 5, -4};
d = Arrays.stream(d).filter(x -> x > 0).toArray();
//d => [8, 7, 5]

如果要过滤不是的引用数组,则需要使用 toArray 方法,该方法采用 an 来获取原始类型的数组作为结果:Object[]IntFunction

String[] a = { "s", "", "1", "", "" };
a = Arrays.stream(a).filter(s -> !s.isEmpty()).toArray(String[]::new);

答案 2

更简单,加起来,String[]

使用内置过滤器filter(StringUtils::isNotEmpty)org.apache.commons.lang3

import org.apache.commons.lang3.StringUtils;

    String test = "a\nb\n\nc\n";
    String[] lines = test.split("\\n", -1);


    String[]  result = Arrays.stream(lines).filter(StringUtils::isNotEmpty).toArray(String[]::new);
    System.out.println(Arrays.toString(lines));
    System.out.println(Arrays.toString(result));

和输出: [a, b, , c, ] [a, b, c]


推荐