如何在Java中查找Int、float和String数组中的最大值和最小值

如何在Java中查找Int、float和String数组中的最大值和最小值,java,Java,有没有办法找出由整数、浮点数和字符串或字符组成的数组的最大值和最小值?在爪哇 例如: A={1,2,3,4,4.5,4.4,NA,NA,NA} 所以忽略所有的字符和字符串 预期成果: 这里的最大元素是4.5 最小值为1,这将有望完成任务。我只考虑了int、double和string ArrayList<Object> list = new ArrayList<Object>(Arrays.asList(1, 2, 3, 4, 4.5, 4.4, "NA", "NA

有没有办法找出由整数、浮点数和字符串或字符组成的数组的最大值和最小值?在爪哇

例如: A={1,2,3,4,4.5,4.4,NA,NA,NA}

所以忽略所有的字符和字符串

预期成果: 这里的最大元素是4.5
最小值为1,这将有望完成任务。我只考虑了int、double和string

    ArrayList<Object> list = new ArrayList<Object>(Arrays.asList(1, 2, 3, 4, 4.5, 4.4, "NA", "NA", "NA"));
    double num , max  = Float.MIN_VALUE;
    for (Object item : list)
    {
        if (item instanceof Integer)
        {
            num  =(int)item + 0.0;
        }
        else
        {
            if(item instanceof String)
            {
                // don't do anything - skip 
                continue ;
            }
            else
            {
                // is a double
                num = (double)(item) ;

            }
        }
        if(num >= max)
        {
            max = num ;
        }
    }
    System.out.println(max);

这就是我使用Java8的方式+

Object[] array = new Object[] { 1, "2", 2.5f, 3, "test" };
double result = Stream.of(array)
                    .filter(x -> x instanceof Number)
                    .mapToDouble(x -> ((Number) x).doubleValue())
                    .max().orElse(Double.MIN_VALUE);
->result=3

您可以从数组中提取float和int,忽略字符串值,然后查找最大值和最小值

import java.util.Arrays;
public class stackMax
{
    public static void main (String[] args)
    {
        String[] A={"1","2","3","4","4.5","4.4","NA","NA","NA"};
        System.out.println(findMax(A));
    }

public static String findMax(String[] A)
{
    int max=0,min=0; //stores minimum and maximum values
    int f=0;  //counter to store values in "float" arrays
    //store length for FloatArray so we dont get extra zereos at the end
    int floatLength =0;

    for(int i=0;i<A.length;i++){
        try{
            Float.parseFloat(A[i]);
            floatLength++;
        }
        catch(NumberFormatException e) {}
    }

    //arrays to store int and float values from main Array "A"
    float[] floatArray = new float[floatLength];
    for(int i=0;i<floatLength;i++){
        try{ //checking valid float using parseInt() method 
            floatArray[f] = Float.parseFloat(A[i]); 
            f++;
        }  
        catch (NumberFormatException e) {}      
    }
    Arrays.sort(floatArray);
    return String.format("\nMaximum value is %.1f\nMinimum value is %.1f",floatArray[floatArray.length-1],floatArray[0]);
}       
}

NA与1相比如何?不,如果你仔细观察,数组中的“1”只是做一个常规循环,只跟踪数字。一个重要的问题是,你是如何得到这样一个数组的。这表明设计不好。Java是一种类型检查语言是有原因的。在同一个数据结构中混合数据,然后尝试将它们分解,这不是一个好的设计。因此,当您从db中获取它们时,如果它们不是数字,请不要将它们放入数组中。我仍然怀疑这是一个糟糕的设计,因为DB中该列的语义似乎过于松散。请注意,从浮点(如果有的话)转换为双精度意味着失去精度。