2016-11-25 4 views
0

私は物というパッケージを持っています。このパッケージには、Fruit、Food、Perishable、Shoes、Itemなどのレギュラークラスと抽象クラスがあります。クリックするとこれらをフィルタリングするフィルタを作成します。たとえば、ボタンの果物をクリックすると、果物が収穫されます。 CODEと呼ばれる別のパッケージには、4つのクラスがあり、それぞれデータとメソッドのインポート、アプリケーションの実行、GUIとコントローラなどの機能を提供します。私はボタンを表示するためにGUIクラスを設定しましたが、GUIクラスでクリックされたボタンに応答するクラスである "リスニング"クラスでJavaにアイテムをフィルタリングする方法を混乱させています。コードを書くにはどうすればいいですか?私は以下を試しましたが、うまくいきません。私は物事を輸入しなければならないのですか? Javaでアイテムをフィルタリングする

は別のポストでは、このコードがあった:

List<Person> beerDrinkers = persons.stream() 
.filter(p -> p.getAge() > 16).collect(Collectors.toList()); 

//Lets say I edit this to make it similar to my problem 
List<Item> Perishables = Food.stream() 
.filter(p -> p.getName()).collect(Collectors.toList()); 

動作しないでしょうし、それは私にエラーが発生します。誰かがこのコードがどのように機能し、どのように問題に適用できるか説明できますか?

// I currently have this empty in my controller class to use as a filter. Am I suppose to filter over here or in the class that holds the methods? 
else if(text.equals("Food")){ 
    } 

パッケージ public abstract class食品拡張アイテム{

String Expiration_Date; 

public String toString() 
{ 
    return super.toString() + ", Expiration: " + Expiration_Date; 
} 
} 

package Products; 

public class Fruit extends Perishable { 

public Fruit(String s) 
{ 
    StringTokenizer stk = new StringTokenizer(s); 

    stk.nextToken(); 

    this.Item_name = stk.nextToken(); 
    this.Item_code = stk.nextToken(); 
    this.price = Double.parseDouble(stk.nextToken()); 
    this.Expiration_Date = stk.nextToken(); 
    if (stk.nextToken().compareTo("false") == 0) 
     this.flag = false; 
    else 
     this.flag = true; 
    this.inventory = Integer.parseInt(stk.nextToken()); 

} 

public String toString() 
{ 
    return super.toString(); 
} 

} 
+0

私の関心を引っ張ってきたことが1つあります。あなたはコードを持っています:filter(p - > pgetName())。フィルターに渡される関数は、ブール値を返す必要があります。関数名は、フィルターによって使用される値を返すgetNameです。戻り値はブール値ではありません。 – user902383

+0

さらに、あなたはあなたが得ているエラーを追加することができますか?それはいくつかの問題をクリアすることができます – user902383

答えて

-1

参照したコードはJDK 1.8を使用しています。 コンソールで javac -versionを実行してjdkのバージョンを確認する必要があります。

List<Item> foods = perishables.stream() 
.filter(p -> p.getSimpleName().equals("Food")).collect(Collectors.toList()); 

ソースを参照すると、FoodはItemのリストですか? List.stream()は、コレクションとのStreamインターフェイスを返します。 StreamはJDK 1.8のインターフェイスで、コレクション要素を操作するクロージャを作成できます。フィルタメソッドでbool値を返す必要があります。

stream()コレクションを実装するクラスのメソッドであるので、我々は生鮮オブジェクトとストリームインターフェイスを取得するために生鮮のArrayListを(またはその他)のこのメソッドを使用します。次に、filterメソッドを使用してfilterオブジェクトを破棄し、フィルタリングされたオブジェクトを含む新しいストリームを返します。最後に、collect(Collectors.toList())を使用して、フィルタリングされたオブジェクトをArrayListに蓄積します。

BTW Class.getSimpleNameは、パッケージ名なしの短いクラス名を返すことができます。

+0

私はこの問題にどのように取り組んでいますか?私は私がMac用の新しいosを使っている私としてJDkの最新バージョンを持っていると仮定します。 –

+0

こんにちは、私はそれらのクラスがどのように見えるかについてきました。 –

+0

ほとんどの場合、私たちはそれをインストールしないので、jdkのバージョンを確認する方がよいでしょう。 lamdbaでストリーム** ** thtaバージョンでのみ使用できます。 jdkがこれより古い場合は、もう1つのjdkをインストールし、特定のコンパイラをIDEに設定することができます。[JDK1.8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads- 2133151.html) –

関連する問題