2016-12-05 9 views
0

からキーで空のマップを作成する私は、列挙型を次ていますストリームAPI:列挙型

public enum ProductType { 
    RED_MEAT, POULTRY, FISH, EGGS, NUTS, DAIRY, CERIALS_AND_GRAINS, FRUIT, VEGETABLES, OIL_AND_SUGARS 
} 

を私はenumからキーとNULL値でマップを作成したいと思います。私は、次のコードthis answerに応じて試してみました:

Map<ProductType, DietFrequency> diet = Arrays.stream(ProductType.values()) 
     .collect(Collectors.toMap(productType -> productType, value -> null)); 

しかし、私はここにNullPointerExceptionを取得しています。私は間違って何をしていますか?

答えて

3

私は確かにEnumMapがあなたのニーズにもっと適していると確信しています。

Map<ProductType, DietFrequency> diet = new EnumMap<>(ProductType.class); 

enumマップは、enum値の場合、HashMapよりはるかに効率的です。デフォルトでは、マッピングは存在しません。あなたのユースケースにもよりますが、それはうまくいくかもしれません(map.get(RED_MEAT)はあなたが望むものと思われる)nullですが、containsKey()チェックまたはループをエントリに対して実行する場合は、マッピングを明示的に設定する必要があります〜null: