import java.util.*;
import java.io.*;

public class Animal1 {
    public static void main( String [] args ) throws IOException {
        ArrayList<Animal> animalFile = new ArrayList<>();

        try {
            BufferedReader br = new BufferedReader(new FileReader("animal.txt"));
            String fileRead = br.readLine();            
            while (fileRead != null) {                
                String[] tokenSize = fileRead.split(":");
                String animalName = tokenSize[0];
                int maxLength = Integer.parseInt(tokenSize[1]);
                Animal animalObj = new Animal(animalName, maxLength);
                animalFile.add(animalObj);
                fileRead = br.readLine();
            }
            br.close(); 
        }
        catch (FileNotFoundException e){
            System.out.println("file not found");
        }
        System.out.println("The three largest animals are: ");
    }    
}

C'est mon code jusqu'à présent, il extrait les données de mon fichier animal et génère les tableaux que j'ai créés pour chaque objet du fichier. Comment comparer un tableau en Java pour pouvoir imprimer les trois plus gros animaux, classés par le plus grand en premier? Je veux imprimer le nom de l'animal sur une nouvelle ligne avec la longueur maximale.

0
User786 24 nov. 2017 à 01:43

3 réponses

Meilleure réponse

Pour imprimer les 3 plus gros animaux, vous pouvez faire comme ceci:

  • sort la liste par maxLength dans l'ordre inverse pour obtenir le plus grand en premier
  • puis keep les 3 premiers
  • print eux
animalFile.stream()
          .sorted(Comparator.comparingInt(Animal::getMaxLength).reversed())
          .limit(3)
          .forEach(a -> System.out.println(a.animalName + ", length " + a.maxLength));

getMaxLength() est la méthode getter


La première méthode ne gardera pas la liste triée, celle-ci oui:

Collections.sort(animalFile,Comparator.comparingInt(Animal::getMaxLength).reversed()); 
animalFile.stream().limit(3).forEach(System.out::println);  //Will use toString() you write
0
azro 24 nov. 2017 à 13:23

Vous pourriez faire:

Collections.sort(animalFile, Collections.reverseOrder(Comparator.comparingInt(a-> a.getMaximumLength())));

System.out.print("The 3 largest animals are: ");

animalFile.subList(0, 3).stream().forEach(n -> System.out.print(n.animalName + " "));
0
smitty1 23 nov. 2017 à 23:44

Quelque chose comme:

animalFile.stream()
          .sorted(Comparator.comparingInt(Animal::getMaxLength).reversed())
          .limit(3)
          .forEach(e -> { /* do logic */ });
0
Ousmane D. 23 nov. 2017 à 23:04
47464171