2016-08-10 1 views
1

J'essaie de trouver quel entrepôt a le plus grand nombre de chaque partie. J'ai mis en place une super classe définie ci-dessous.Java trouver le plus grand attribut entre différents objets de la même classe

public abstract class warehouse { 
    int part1; 
    int part2; 
    int part3; 
    int part4; 
    int part5; 
    String name; 
    File inventory = new File("Inventory.txt"); 
    File transactions = new File("Transactions.txt"); 
    public warehouse() throws FileNotFoundException { 

    } 

    public int getPart1() { 
     return part1; 
    } 
    public int getPart2(){ 
     return part2; 
    } 
    public int getPart3() { 
     return part3; 
    } 
    public int getPart4() { 
     return part4; 
    } 
    public int getPart5() { 
     return part5; 
    } 

J'ai six sous-classes, je vais vous montrer la définition d'un, ils sont tous les mêmes, sauf pour le champ de nom.

import java.io.FileNotFoundException; 
public class Atlanta extends warehouse { 

    public Atlanta() throws FileNotFoundException { 
     name = "Atlanta"; 
    } 
} 

Je suis en train de comparer par exemple, part1 entre les six classes. J'ai mis en place les fonctions pour retourner les valeurs de chacune des parties, mais il serait vraiment difficile à faire si (Atlanta.getPart1() > Chicago.getPart1() && Atlanta.getPart1()> Denver.getPart1())... est là, je peux trouver quel objet a la plus grande valeur de chaque attributs sans avoir à écrire cela pour chaque combinaison et chaque partie?

Toute aide serait grandement appréciée.

+0

Pourquoi une sous-classe pour chaque emplacement? Pourquoi pas juste une instance différente d'entrepôt et une sorte de classe de collection pour tenir tous vos entrepôts. Ensuite, la classe de collection peut avoir une méthode pour vous dire quel entrepôt a le plus de "partie 4" etc. – John3136

Répondre

1

Vous pouvez utiliser Collection.max() avec une bonne Comparator fondée sur la classe abstraite

Collections.max(
    Arrays.asList(new Atlanta(), new Pennsylvania(), ...), 
    Comparator.comparing(warehouse::getPart1) 
);