2016-05-18 9 views
0

現在、私は大量のオブジェクト(周期表のすべての要素)を持つプログラムで作業しています。リストを作成する必要があります100以上のオブジェクト。すべてのオブジェクトを一度宣言してインスタンス化でき、メソッドが存在するクラスを読み込む方法はありますか?例えば、ユーザーが "He"を入力すると、elementSymbol "He"を保持する対応するオブジェクトを見つけることができますか?私はそのシンボルを返すgetSymbolメソッドを使って各オブジェクトをチェックしてからそれを入力と比較することができなければなりません。その後、私は計算のためのモル質量のようにオブジェクトに割り当てられている他のフィールドを使用する予定ですが、それは問題になることはありません。効果的にこれを行う別の方法があるなら、それは非常に高く評価されるでしょう。arrayListなしでオブジェクトを見つける方法

+1

なぜArrayListを使用しないのですか?私には、これは完璧なユースケースのように聞こえます。 – moscar

+0

@moscarまさに私も思った。要素クラスを配列リストに追加し、ラムダを使用して要素のIDに基づいて必要なものを選択するだけです。 – ManoDestra

+0

この男もenumでそれをやった:https://gist.github.com/felixdivo/11159677。これは@Vovkaが彼の答えで示唆したものです。列挙型は、周期表の一定の性質を考慮すると、この要件のための洗練されたソリューションです。 – ManoDestra

答えて

3

にすべてを保存し、elementSymbolをキーにしてobjectを値として使用すると、map.get(elementSymbol)を呼び出してオブジェクトにアクセスできます。

クラスについての詳細Maphere

1

あなたは、このためにhashmapを使用することができます。あなたがオブジェクトの一定の数を持っていたよう

HashMap<String,PeriodObject> peridicTable = new HashMap<String,PeriodObject>(); 
periodictable.add("he",object); 
periodicTableobject = periodictable.get("he"); 
3

は、列挙型でそれらを管理するために、より良いです:

public enum Elements { 
    ag(10), //10 here is the molarMass constructor parameter 
    he(20); 

    //constructor if needed 
    Elements(int molarMass) { 
     this.molarMass = molarMass; 
    } 

    //extra fields 
    final private int molarMass; 
} 

GET:あなたが使用して嫌ういる理由

Elements.valueOf("he") 
+0

どうすればこのクラスを検索したり、入力に対してすべての列挙型をチェックすることができますか?私は列挙型に慣れていません –

+0

要素he = Element.valueOf( "he");/* "he"その入力文字列*/ int m = he.getMolarMass(); – Vovka

0

がわかりませんArrayList、それはあなたの要件に完全に有効な解決策です。私は、Enumの使用は、より良い解決策は、定期的なテーブルの定期的な性質を考えると、私は完全なストリームAPIを利用して、このリストの答えを追加しています。

import java.util.ArrayList; 
import java.util.List; 

public class Test { 
    public static void main(String[] args) { 
     Test test = new Test(); 
     test.run(); 
    } 

    private void run() { 
     List<Element> elements = new ArrayList<>(); 
     Element oxygen = new Element("O", "Oxygen"); 
     Element carbon = new Element("C", "Carbon"); 
     Element hydrogen = new Element("H", "Hydrogen"); 
     Element helium = new Element("He", "Helium"); 
     elements.add(oxygen); 
     elements.add(carbon); 
     elements.add(hydrogen); 
     elements.add(helium); 

     System.out.println("All Elements:"); 
     for (Element element : elements) { 
      System.out.println("\t" + element); 
     } 

     System.out.println(); 

     Element oxy = elements.stream().filter(e -> e.getId().equals("He")).findFirst().get(); 
     System.out.println("Specific Element: " + oxy); 
    } 

    private class Element { 
     private final String id; 
     private final String name; 

     public Element(String id, String name) { 
      this.id = id; 
      this.name = name; 
     } 

     public String getId() { 
      return this.id; 
     } 

     public String getName() { 
      return this.name; 
     } 

     @Override 
     public String toString() { 
      return this.getName() + " [" + this.getId() + "]"; 
     } 
    } 
} 
+0

手作業で各要素を入力するのは面倒だったので、より効率的にアクセスできる方法がなければならないと思いました。私は本当に100回以上list.add()をやり直す必要はありませんでした。リストを使ってそれを行うより良い方法があると確信していますが、enumを使用してそれらを保持する方がはるかに優れています –

関連する問題