Java ArrayList - Wie bekomme ich den Niedrigsten Wert?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ab Java 8 gibt es dazu eine sehr komfortable Funktion: stream().min(...)

Funktioniert z.B. wie folgt: https://pastebin.com/DaF6NsUu

import java.util.*;

public class Minimum {

   public static void main(String[] args) {

      // Random zum Befüllen der Liste
      final Random r = new Random();

      // Liste
      final List<WrappedValue> values = new ArrayList<>();

      // Befüllen der Liste - hier werden 10 Zufallszahlen reingesteckt
      for (int i = 0; i < 10; i++) {
         values.add(new WrappedValue(r.nextInt(30)));
      }

      // Die Liste
      System.out.println("Liste: " + values.toString());

      // Bemerkung: min(...) erwartet einen Comparator
      Optional<WrappedValue> min = values.stream().min(Comparator.comparingInt(wrappedValue -> wrappedValue.getValue()));
      
      // Das kleinste Element - Bemerkung: Falls die Liste leer ist, wird ein leerer Optional zurückgegeben,
      // es sollte mit ".isPresent()" geprüft werden, ob der Optional leer ist 
      System.out.println("Niedrigster Wert: " + min.get());

   }

}

class WrappedValue { // Die Klasse, die den Wert enthält

   private int value;

   public WrappedValue(int value) { // Konstruktor
      this.value = value;
   }

   public int getValue() { // Getter
      return value;
   }

   public void setValue(int value) { // Setter
      this.value = value;
   }

   @Override
   public String toString() { // damit System.out.println funktioniert
      return Integer.toString(value);
   }
}

Woher ich das weiß:Berufserfahrung – Software-Entwicklung (Java Enterprise)

mertkert  24.04.2020, 10:59

Nicht dass ich den Ansatz falsch finde, aber komfortabler oder lesbarer als ein altmodisches Collections.min() ist das auch nicht.

Streaming ist eine coole Sache, aber ich habe den Eindruck dass es vor lauter Freude manchmal unnötig verwendet wird.

2
glasair  25.04.2020, 11:24
@mertkert

Stimmt. Der Vorteil von Streams ist halt, dass man ggf noch andere Sachen machen kann zB Filterung vorher.

1

https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#min-java.util.Collection-

Returns the minimum element of the given collection, according to the natural ordering of its elements. All elements in the collection must implement the Comparable interface. Furthermore, all elements in the collection must be mutually comparable (that is, e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the collection).

Wenn das eine Hausaufgabe ist, sollst du es aber wohl selbst machen. Mit einer Schleife durchiterieren, dabei kleinstes Element merken und ggf. aktualisieren, keine Hexerei.

Außerdem ist die Frage ob du den Wert willst oder den Index.

Du musst die Arraylist sortieren.

Collections.sort(arraylist);
System.out.println(arraylist.get(0));
Woher ich das weiß:Studium / Ausbildung – Informatikstudent

mertkert  24.04.2020, 10:05

Wenn man eine unterbeschäftigte CPU hat, kann man das machen, ja.

4