Java数组元素筛选后,如何移除末尾未赋值的空元素?
解决数组筛选后末尾空元素的问题
你的问题根源在于:创建的greaterThanThres数组长度和原数组完全一致,但只有前j个元素是符合条件的有效数据,剩余未赋值的元素默认是0,所以输出时会显示成00:00。下面给你几种实用的解决方法:
方法一:先统计数量再创建对应长度的数组
先遍历一次原数组,统计出符合条件的元素个数,再创建刚好能容纳这些元素的数组,避免多余空间:
public static int[] overGivenMinutes(int minThres, int arrayValues[]) { // 第一步:统计符合条件的元素数量 int validCount = 0; for (int value : arrayValues) { int minutes = value / 60; if (minutes > minThres) { validCount++; } } // 第二步:创建对应长度的数组 int[] greaterThanThres = new int[validCount]; int index = 0; for (int value : arrayValues) { int minutes = value / 60; if (minutes > minThres) { greaterThanThres[index++] = value; } } return greaterThanThres; }
方法二:用动态列表存储再转数组
利用ArrayList的动态扩容特性,先把符合条件的元素存进去,最后再转成固定长度的int数组,代码更简洁:
import java.util.ArrayList; import java.util.List; public static int[] overGivenMinutes(int minThres, int arrayValues[]) { List<Integer> tempList = new ArrayList<>(); for (int value : arrayValues) { int minutes = value / 60; if (minutes > minThres) { tempList.add(value); } } // 将列表转为int数组 int[] greaterThanThres = new int[tempList.size()]; for (int i = 0; i < tempList.size(); i++) { greaterThanThres[i] = tempList.get(i); } return greaterThanThres; } // 如果用Java 8及以上版本,转数组的步骤可以简化: // return tempList.stream().mapToInt(Integer::intValue).toArray();
方法三:用Java 8+ Stream API一行实现
借助Stream的过滤和收集功能,直接生成符合要求的数组,代码最简洁:
import java.util.Arrays; public static int[] overGivenMinutes(int minThres, int arrayValues[]) { return Arrays.stream(arrayValues) .filter(value -> (value / 60) > minThres) .toArray(); }
以上任意一种方法修改后,返回的数组都只会包含符合条件的元素,长度刚好匹配,输出时就不会再出现末尾的00:00空元素了。
内容的提问来源于stack exchange,提问作者GrasshopperAtBest
相关产品推荐
相关产品推荐

