青衣画白扇 2022-12-11 12:17 采纳率: 25%
浏览 16

stream 流去重函数式方法


public static void main(String[] args) {
        List<User> list=new ArrayList<>();
        User user = new User();
        user.setPassword("1242");
        user.setNickName("xkk");
        user.setType("sucess");
        User user1 = new User();
        user1.setPassword("1242");
        user1.setNickName("xkk");
        user1.setType("faile");
        User user2 = new User();
        user2.setPassword("666");
        user2.setNickName("xqq");
        user2.setType("dis");
        list.add(user);
        list.add(user1);
        list.add(user2);

       list.stream().
               filter(distinctByKey(new Function<User, Object>() {
            @Override
            public Object apply(User user) {
                return user.getPassword()+":"+user.getNickName();
            }
        })).collect(Collectors.toList());
    }

    public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
        Map<Object, Boolean> seen = new HashMap<>();
        System.out.println("调用次数.........");
        return new Predicate<T>() {
            @Override
            public boolean test(T t) {
                return seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) ==null;
            }
        };
    }

问题是distinctByKey 方法中的Map为什么之声明了一次

  • 写回答

2条回答 默认 最新

  • pzzhao 2022-12-11 12:40
    关注

    你可以试着debug一下,在调用次数和 seen.putIfAbsent 这里分别打个断点,你会发现 Map<Object, Boolean> seen = new HashMap<>(); 只执行了一次,而里面的函数式方法是调用了三次。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月11日

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器