You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:02:37