2016-05-25 7 views
-1

私は私のarraylistに問題があります。ArrayList反復錯誤

私は靴を持っています。これらの靴にはカテゴリと価格があります:それはスマートシューズ、カジュアルシューズなどですが、カテゴリごとのシューズの総量を取得したいと考えています。

例えば、私のarraylistにはそれぞれ価格が付いているスマートシューズが10個、カジュアルシューズが15個ありますが、そのカテゴリのみとそのカテゴリの合計数を求めます。

カテゴリとそのカテゴリに含まれる靴の総量と価格、靴、カテゴリを持つ領収書リストを格納するカテゴリと呼ばれるarraylistがあります。

float total = 0; 

for(int i = 0; i < receipts.size(); i++){ 

    for(int j = 0; j< receipts.size(); j++) 
     if (TextUtils.equals(receipts.get(i).getCategory(), receipts.get(j).getCategory())) 
      total += Float.parseFloat(receipts.get(j).getPrice()); 

    categories.add(new Category(receipts.get(i).getCategory(),String.valueOf(total))); 
    total = 0; 
} 

このコードの問題は、1つのカテゴリの複数の値を取得する傾向があることです。

+0

いいえ、その何かをstackoverflowで、私はそれに取り組ませてください。 – Chrometobia

+0

カテゴリが既に追加されているかどうかを確認する必要があります。現在のコードでは、 '' 'Casual'、 'C​​asual' ''を含むリストを反復すると、2つのカジュアルなカテゴリが得られます。それぞれが2の合計値を持ちます。 – hoefling

+2

' Map'を使って、あなたは各カテゴリの1つだけを保持しますか? – Jason

答えて

1

Java 8を使用する場合は、lambdaを使用することをお勧めします。あなたは靴の配列を持っている場合たとえば、あなたがカテゴリ別に靴を分離することができます

ArrayList<Shoe> receipts = new ArrayList<>(); 

final Map<Long, List<Shoe>> collect = receipts.stream().collect(Collectors.groupingBy(Shoe::getIdCategory)); 

次に、あなたがあなたの好みのコレクションを取得することができます。

final List<Shoe> xShoes = collect.get(1); 
final List<Shoe> yShoes = collect.get(2); 

をし、また、あなたが合計を得ることができます価格は:

long priceX = xShoes.stream().map(Shoe::getPrice).reduce((aLong, aLong2) -> aLong + aLong2).get(); 
    long priceY = xShoes.stream().map(Shoe::getPrice).reduce((aLong, aLong2) -> aLong + aLong2).get(); 
+0

ありがとうございました。この作業には多くの問題がありました。 – Chrometobia

+1

靴のダイレクトマップの場合は '' 'Map map = receipts.stream()。collect(Collectors.groupingBy(Shoe :: getCategory、Collectors.counting()));' 'カウントするカテゴリ。 –

+0

私の答えが正しい場合。あなたは答えを受け入れることができますか? :) – elysrivero99