从HashMap获取匹配的对象类型

J. *_*Doe 2 java loops hashmap

首先,我想说我对编程很新.我在同一个HashMap中存储了一些超类的"扩展".(例如XY和XZ扩展X - 我将X,XY和XZ存储在同一个HashMap中).我决定这样做是为了方便 - 通常每次我做某事时,我都需要扩展"X"的所有类 - 在本例中为"XY"和"XZ".当我想检查单个值是否是指定类型对象的实例时也没有问题 - 我只是使用"instanceof"公式.假设我想检查关键字"key"的对象是否是"XY"的实例:

X objectoftypeX = hashmap.get(key)
if(objectoftypeX instanceof XY){
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

但是我的问题来了:如何只在这个HashMap中迭代,例如XY?这可能不单独检查每个对象吗?这样做有意义吗?希望你能理解我的问题.

joh*_*384 5

地图是相当简单的结构,可以优化一种访问形式(按键查找).如果您希望能够快速查找特定类型的项目,则需要使用不同的结构.

例如,您可以选择制作多个地图或制作嵌套地图:

// Nested map, with the top level map indexing by Type (can be a String)
// and the maps inside it indexing by a String key.
Map<Type, Map<String, Object>> map = ...;
Run Code Online (Sandbox Code Playgroud)

如果您不介意单独检查每个条目的开销,您可以使用流轻松获取所需的所有元素:

List<XY> list = hashmap.values().stream()
    .filter(v -> v instanceof XY)  // check type
    .map(v -> (XY) v)   // do cast
    .collect(Collectors.toList());  // collect to list
Run Code Online (Sandbox Code Playgroud)