java - 如何创建一个元素少于给定数组的新数组?
问题描述
在 Java 中,当我基于一个作为参数的数组构建一个新数组时。例如,假设我想用给定数组的所有值构建一个数组,除了 sevens,所以我想取 {5,7,8,9,7,3} 并返回 {5,8,9,3 } 不修改输入数组。在 python 中,这将非常简单,我会做这样的事情:
def no7s(x):
y=[]
for num in x:
if num!=7:
y+=[num]
return y
在java中,这似乎要复杂得多。这是我尝试过的:
public static int[] no7s(int[] x){
int size=0;
for (int num: x){
if (num!=7){
size+=1;
}
}
int[] y = new int[size];
for (int i=0; i<x.length; i++){
if (x[i]!=7){
y[i]=x[i];
}
}
return y;
}
我对最后一个 for 循环感到困惑;我现在所拥有的不起作用,但我不确定我应该做什么。我很确定问题在于 x.length>size,但我不知道如何解释这一点。
解决方案
在 Java 中,这个问题的答案是流。
这里no7s
用流重写:
public static int[] no7s(int[] x) {
return Arrays.stream(x)
.filter(i -> i != 7)
.toArray();
}
确保包含import java.util.Arrays;
在您的 java 文件的顶部。
推荐阅读
- reactjs - VSCode IDE 编写反应代码的问题
- css - 从三个 div 列垂直对齐文本
- c++ - “无匹配函数”和“无法初始化 char(*)[*] 类型的参数
- javascript - CakePHP 3.6.11:根据下拉值更新字段
- dialogflow-es - 谷歌是否有任何 API 可以为谷歌助手创建项目?
- sql-server - 如何在 sql server 2014 中翻转表
- python - 从文本文件Python中提取重复的短语
- python - 如何在 django 中按日期范围过滤记录?
- skiasharp - 在 SkiaSharp 中更改位图的颜色类型?
- mysql - 扩展 mysql Dockerfile 时的意外行为