佬们, Java 方法有时候要返回 Map,但是可读性很差,不知道有没有替代方法?

109 天前
 shitshit666
    /**
     * 根据 refId 和 funcCode 查询收藏个数
     *
     * @param refIds   关联资源的 id
     * @param funCode `like` 点赞 `collect`收藏
     * @param module  模块
     * @return refId 和数量映射
     */
    Map<Long, Integer> collectCountByRef(List<Long> refIds, String funCode, Integer module);

    /**
     * 查询收藏或点赞状态
     * @param module 1:****
     * @param userId  用户 id
     * @param funCode `like` 点赞 `collect`收藏
     * @param ds id
     * @return inspireId 和状态映射
     */
    Map<Long, Boolean> getCollectStatus(Integer module, Long userId, String funCode, List<Long> inspireIds);
3413 次点击
所在节点    Java
32 条回复
cuizibo
107 天前
批量查询改为单个查询 返回 int hhh
ala2008
107 天前
返回一个对象不就好了,属性有 ID 和数量
liyanggyang
107 天前
@SoloCompany #3 我也觉得,如果强制要求,就只有返回时候 对象接收。鉴于 Map<Long, Integer> 如何封装成一个对象? 一个有 2 的 64 次方个字段的对象, 字段名分别为 r0, r1, 到 r 无穷吗。 那就返回 List<DTO> , DTO:
private String key;
private String value;

key set 变量名称:r0, r1, 到 r 无穷
value set 值
Mandelo
107 天前
感觉多此一举了,都是基础的包装类,又不是 Long,Obj 这种
runliuv
107 天前
用实体类返回,完美!
Aresxue
107 天前
1.一般是对外的接口层( http 、rpc 、mq )是需要一定避免 Map 的,内部方法合理即可不需要一定避免;
2.针对你这个 case 非要搞可以搞个 List<xxxCount>对象,意义聊胜于无,从性能来说 Map 还更好些。
mmdsun
107 天前
@SoloCompany 返回 List+ 对象呢?

List<RefIdAndCount>

class RefIdAndCount{
Long id;
Long count
}

另外 op 文章里面的 map+枚举可以换成 java.util.EnumMap;
shitshit666
107 天前
@Aresxue 谢谢,目前考虑避免掉 map 了
shitshit666
107 天前
@oneisall8955 打算这样了
shitshit666
107 天前
@leonshaw 有道理
billbob
106 天前
JsonNode,我是这样做的,它能和框架完美的契合,而且序列化也不操心!
SoloCompany
106 天前
@mmdsun 没想到这么无意义的问题还有人在讨论, 我算是理解了啥是尽信书不如无书

试问 Stream.collect(Collectors.groupingBy()) 为啥返回的是 Map<K, List<T>> 而不是 SomeFxxkingUnmeaningEntry<K, T>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1069297

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX