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.
3 réponses
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
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 + " "));
Quelque chose comme:
animalFile.stream()
.sorted(Comparator.comparingInt(Animal::getMaxLength).reversed())
.limit(3)
.forEach(e -> { /* do logic */ });
De nouvelles questions
java
Java est un langage de programmation de haut niveau. Utilisez cette balise lorsque vous rencontrez des problèmes pour utiliser ou comprendre la langue elle-même. Cette balise est rarement utilisée seule et est le plus souvent utilisée en conjonction avec [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] et [maven].