首页 > 解决方案 > 当对象在 HashMap 中时,如何按名称和枚举过滤获取请求?

问题描述

所以我有一个将卡片存储到 HashMap<Integer, Card> 的 API,我可以通过两种方式向该 API 发送 GET:

http://localhost:8080/app/cards - 将列出所有卡片(JSON),例如:

[
{
    "atk": 5,
    "class": "QUALQUER",
    "def": 2,
    "desc": "UM TESTE REX CARD PRE-ALPHA EDITION",
    "id": 1,
    "name": "T-REX",
    "type": "CRIATURA"
},
{
    "atk": 5,
    "class": "QUALQUER",
    "def": 2,
    "desc": "UM TESTE REX CARD PRE-ALPHA EDITION",
    "id": 2,
    "name": "T-REX",
    "type": "CRIATURA"
}]

我也可以通过 ID 获取 http://localhost:8080/app/cards/1 (1 是 ID)

我的身份证

@GET
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public Carta getById(@PathParam("id") int id) {
    return repositorio.getID(id);
}

但是,我仍然需要按名称、类型和类创建一个 GET。该名称将只检索一个结果,但类和类型是枚举,我不知道如何过滤 HashMap 中的每个 Card 对象,因为它是一个 HashMap<Integer, Card>,因此通过 ID 获取很容易。无需创建数据库,因为这是一个练习,但我尝试的一切都失败了,包括创建 GET 请求,我首先复制上述方法并将@Path 更改为“名称”,但它也给了我错误.

卡类:

public class Card {

private int id;

private String name;
private String desc;
private int atk;
private int def;
private CardType type; //enum
private CardClass class;  //enum

标签: javahashmap

解决方案


您可以过滤HashMap使用 Java 8 的流:

List<Card> cards = cardsHashMap.entrySet().stream()
        //filter cards by type
        .filter(e -> Card.CRIATURA.equals(e.getValue().getType())) 
        //map to the corresponding Card object 
        .map(Entry::getValue) 
        .collect(Collectors.toList());

推荐阅读