Java - getting max value from an arraylist of objects?

后端 未结 5 931
北恋
北恋 2020-11-27 08:14

Is there an easy way to get the max value from one field of an object in an arraylist of objects?

For example, out of the following object, I was hoping to get the h

相关标签:
5条回答
  • 2020-11-27 08:25

    With Java 8 you can use stream() together with it's predefined max() function and Comparator.comparing() functionality with lambda expression:

    ValuePairs maxValue = values.stream().max(Comparator.comparing(v -> v.getMValue())).get();
    
    0 讨论(0)
  • 2020-11-27 08:26

    Here fist and last is intervals between two indexes of arraylist you can also get for a complete list by removing them and i=0 upto size of float list.

    // for min value

    public String getMinValue(ArrayList list, int first, int last) {

            List<Float> floatList = new ArrayList<>();
    
            for (int i = 0; i < list.size(); i++) {
                Float prova2 = ((Double) list.get(i)).floatValue();
                floatList.add(prova2);
            }
            float min = Float.MAX_VALUE;
            String minValue = "";
    
            for (int i = first; i < last; i++) {
    
    
                if (floatList.get(i) < min) {
                    min = floatList.get(i);
                }
            }
            minValue = String.format("%.1f", min);
            return minValue;
        }
    

    // for max value

        public String getMaxValue(List<Object> list, int first, int last) {
    
            List<Float> floatList = new ArrayList<>();
    
            for (int i = 0; i < list.size(); i++) {
                Float prova2 = ((Double) list.get(i)).floatValue();
                floatList.add(prova2);
            }
    
            float max = Float.MIN_VALUE;
            String maxValue = "";
    
            for (int i = first; i < last; i++) {
    
    
                if (floatList.get(i) > max) {
                    max = floatList.get(i);
                }
            }
            maxValue = String.format("%.1f", max);
            return maxValue;
        }
    
    0 讨论(0)
  • 2020-11-27 08:27

    You should iterate over the list comparing/finding the max value O(N). If you need to do this often replace the list with a PriorityQueue O(1) to find the max.

    0 讨论(0)
  • 2020-11-27 08:28

    This has been answered multiple time already, but since it's the first result on google I will give a Java 8 answer with an example.

    Take a look at the stream feature. Then you can get the max form an List of Objects like this:

    List<ValuePairs> ourValues = new ArrayList<>();
    
    ourValues.stream().max(comparing(ValuePairs::getMValue)).get()
    

    By the way in your example, the attributes should be private. You can then access them with a getter.

    0 讨论(0)
  • 2020-11-27 08:41

    Use a Comparator with Collections.max() to let it know which is greater in comparison.


    Also See

    • How to use custom Comparator
    0 讨论(0)
提交回复
热议问题