我有一个double[]
数组,我想在不添加for
循环的情况下,在一行中过滤掉(创建一个新的不包含)负值数组。 使用Java 8 lambda表达式是否可能?
在Python中使用生成器将如下实现:
[i for i in x if i > 0]
在Java 8中是否有类似简洁的方法?
是的,您可以通过从数组创建一个DoubleStream
、过滤掉负数,并将流转换回数组来实现。以下是一个示例:
double[] d = {8, 7, -6, 5, -4};
d = Arrays.stream(d).filter(x -> x > 0).toArray();
//d => [8, 7, 5]
如果您想过滤一个不是Object[]
类型的引用数组,则需要使用toArray
方法,该方法需要使用IntFunction
获取原始类型的数组作为结果:
String[] a = { "s", "", "1", "", "" };
a = Arrays.stream(a).filter(s -> !s.isEmpty()).toArray(String[]::new);
toArray()
方法会返回一个 Object[]
数组,所以第二行可能会因为类型转换异常而失败。谢谢! - Jesús ZazuetaString[]
相加,使用 org.apache.commons.lang3
的内置过滤器 filter(StringUtils::isNotEmpty)
。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]
double[]
,但使用List
很容易:http://www.dreamsyssoft.com/java-8-lambda-tutorial/filter-tutorial.php - Avery(i for i in x if i > 0)
。 - djsmith