java - 当对象在 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
解决方案
您可以过滤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());
推荐阅读
- google-sheets - 如何根据名称从 sheet1 到 sheet2 检索 VALUES?
- python - 使用 BeautifulSoup 填充(和识别)空 xml 标签
- flutter - Flutter 如何知道用户是否在使用他/她的手机
- python - Django - 通用 UpdateView 以一种形式工作,但不能以其他形式工作
- ios - 最近更新后 SwiftUI ForEach 无法正常工作
- json - 在 Groovy 中获取 JSON 键的名称
- css - 通过类覆盖引导程序中的颜色与手动修改几个 .css 文件
- angular - 无法设置 BehaviorSubject 的订阅数据
- visual-studio-code - 具有不同的 VS Code 扩展集
- swift - 一些视图作为方法/初始化器的输入参数