佛系郎中 2021-09-15 09:55 采纳率: 100%
浏览 52
已结题

Java集合问题,取不重复集合

实体类集合list(A) A里面有字段a和b,b固定可取三个死值1、2、3,a不定,对于相同的a可能有多个不同的b对应(多个元素,里面a相同b不同)
求:取a不重复的集合result,其中b优先级3>2>1(有3不取2,有2不取1)

我的思路是把A根据b的1、2、3拆分成三个集合中A1\A2\A3,取最终结果时便利A,A3中存在放入result->A2中存在且result不存在放入result->A1中存在result中不存放入result,但是多次便利(拆分+取结果),浪费时间浪费内存空间,有没有更好的解法求解答

  • 写回答

3条回答 默认 最新

  • 峰子哥哥 2021-09-15 10:16
    关注

    steam先给A集合分组 分组成为一个集合map M,该map的key为a,value为具有相同a的集合
    然后遍历map M,value.steam取b值最大的一个元素 统一放到一个新集合

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    峰子哥哥 2021-09-15 10:28

    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import java.util.*;
    import java.util.stream.Collectors;
    
    @Data
    @AllArgsConstructor
    public class Test {
        private String a;
    
        private String b;
    
        public static void main(String[] args) {
            List<Test> list = new ArrayList<>();
            Test test = new Test("a", "1");
            Test test1 = new Test("a", "2");
            Test test2 = new Test("a", "3");
            Test test3 = new Test("b", "2");
            Test test4 = new Test("b", "1");
            Test test5 = new Test("c", "1");
            Test test6 = new Test("b", "3");
            list.add(test);
            list.add(test1);
            list.add(test2);
            list.add(test3);
            list.add(test4);
            list.add(test5);
            list.add(test6);
    
            Map<String, Test> testMap = list.stream().sorted(Comparator.comparing(Test::getB, Comparator.reverseOrder()))
                    .collect(Collectors.toMap(Test::getA, v -> v, (v1, v2) -> v1));
            Collection<Test> newList = testMap.values();
            newList.forEach(System.out::println);
        }
    }
    

    先根据b倒叙 然后转map key为a,value为具有相同a的第一个
    这种方式更简单
    如果能帮到你,请点击下【采纳】,非常感谢

    1
    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 9月23日
  • 已采纳回答 9月16日
  • 修改了问题 9月15日
  • 创建了问题 9月15日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部