V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  wuzhizuiguo  ›  全部回复第 4 页 / 共 5 页
回复总数  92
1  2  3  4  5  
2020-01-07 10:45:32 +08:00
回复了 shijingshijing 创建的主题 互联网 抖音日活过 4 亿了
抖音挺好的, 只要别在公共场合外放. 里面的自然风景,饭菜, 英雄联盟, 还有电影推荐.
行, 其实是里面的腿,柰子,腰都很不错... 这种擦边球,很不错
2019-12-24 09:47:25 +08:00
回复了 tubimasky 创建的主题 问与答 生成机构树 除了递归还有别的方法吗
@aguesuka 谢谢.是的,我把 Node 类放到外面单独建了, 返回 id 为 2 的菜单 用它的 children 这个方法好.谢谢!
2019-12-23 18:46:52 +08:00
回复了 tubimasky 创建的主题 问与答 生成机构树 除了递归还有别的方法吗
@aguesuka 是的,可以改一点. 在你的基础上改了下,去掉了 parent. 传了个 parentId 和 ID 的判断相等的 Function. 对泛型类的比较该怎么实现不懂(怎么取参数,怎么判断大小) , 还有就是 Node::new 是什么意思, 调用 Node 的默认构造方法吗? 还是非默认的 Node(E data)?
下面这个是自己改了老半天的, 可能还是有错误, 请路过的谨慎使用... (compare 是判断是否和 pid 的值相等)


public static <E,ID> List<Node<E>> buildTree(Collection<E> elements, Function<E,ID> getID, Function<E,ID> getParentID,
ID pid, Function<E,Boolean> compare){
Map<ID,Node<E>> idNodeMap = elements.stream().collect(Collectors.toMap(getID,Node::new));
//传进来的集合可能没有包含父类 /最顶级父类
Node<E> root = null;
//返回的列表
List<Node<E>> nodes = new ArrayList<>();
for (E element : elements){
ID selfId = getID.apply(element);
ID parentId = getParentID.apply(element);
Node<E> selfNode = idNodeMap.get(selfId);
//如果这个集合里 有元素有对应的父节点
if (idNodeMap.containsKey(parentId)){
Node<E> parentNode = idNodeMap.get(parentId);
// selfNode.setParent(parentNode); //取消设置父节点,不然看起来很庞大
parentNode.getChildren().add(selfNode);
//如果设置了父节点 pid,而且该节点的父节点也是设置的值 pid
if (pid!=null &&compare.apply(element) && !nodes.contains(selfNode)){
nodes.add(selfNode);
}
}else {
root = selfNode;
//如果设置了父节点 pid,而且该节点的父节点也是设置的值 pid
if (pid!=null &&compare.apply(element) && !nodes.contains(selfNode)){
nodes.add(root);
}

}
}
return nodes;
}


public class Node<E> {
E data;
Set<Node<E>> children;
Node<E> parent;

public Node(E data) {
this.data = data;
children = new HashSet<>();
}

public E getData() {
return data;
}

public void setData(E data) {
this.data = data;
}

public Set<Node<E>> getChildren() {
return children;
}

public void setChildren(Set<Node<E>> children) {
this.children = children;
}

public Node<E> getParent() {
return parent;
}

public void setParent(Node<E> parent) {
this.parent = parent;
}
}

具体调用
List<MenuVO> menuVOList =... 从数据库查出来的结果列表
// 去父节点 pid 为 2 的, 获取该菜单下所有的栏目,
Collection<Node<MenuVO>> nodes = buildTree(menuVOList,e->e.getId(),e->e.getPid(),2,e->e.getPid().intValue() ==2 );
2019-12-23 09:35:46 +08:00
回复了 tubimasky 创建的主题 问与答 生成机构树 除了递归还有别的方法吗
@aguesuka 谢谢, 有效,可以直接生成分类数,不过直接返回 root 太长,每个 chidren 里的 parent 都会显示出来,用 @JSONField(serialize = false )返回可以去掉, 不过感觉不太美观(是个 json 字符串,), 如果没有最高的父节点时,会报 root node more than one. 还有答主的 buildTree 方法,感觉很强,第一次看到这种写法, 唉,要学的还有好多啊.
2019-12-19 15:28:03 +08:00
回复了 raymonddream 创建的主题 分享创造 维护了两年的小程序,给大家展示一下
页面优美. 楼主 能讲讲怎么学前端的吗? 也想做个小程序,但是前端的 css 就难住了.
2019-12-16 11:19:37 +08:00
回复了 granpa 创建的主题 分享创造 弄咯一个微信小程序 ,看看可以用嘛
楼主这个网易的评论是寻找好的评论存在自己数据库的吗?还是点击了去获取网易云音乐那边获取热评.
2019-12-08 17:28:06 +08:00
回复了 wuzhizuiguo 创建的主题 Java 时光树洞的按时间发送顺序是怎么做的 ,rabbitmq 的"后入先出"
已经确认可以按照过期时间发送邮件. 用的是普通前端提交参数(假设,我不会前端, 用的 postman),后台 mysql 储存信息, 同时写入 redis 的 hash 表和 zset 中,设置 score 值为过期时间.接着 spring boot 启动一个定时器,@Scheduled, 设置为上一次结束到到上一次任务开始为 1 秒间隔. 在其中读取 zset 中 0~当前时间的元素(邮件 id), 再去 hash 中找到对应邮件 id 的邮件具体信息,然后删除对应的记录, 接着直接写入消息队列,然后从消息队列里出来, RPC 调用邮件发送接口, 这个地方如果量大了,可以用线程池来 RPC 调用,因为之前其他地方出现过 Hystrix 默认的线程数错误问题.
感谢各位大佬的热心解答,谢谢.
2019-12-08 14:54:31 +08:00
回复了 wuzhizuiguo 创建的主题 Java 时光树洞的按时间发送顺序是怎么做的 ,rabbitmq 的"后入先出"
@star7th 好的,谢谢,就是看到了答主的时光树洞.
2019-12-08 14:52:47 +08:00
回复了 wuzhizuiguo 创建的主题 Java 时光树洞的按时间发送顺序是怎么做的 ,rabbitmq 的"后入先出"
@zhady009 好的,谢谢.我先用普通的定时器做做看,成功了再学下这个 redisson
2019-12-06 10:28:15 +08:00
回复了 wuzhizuiguo 创建的主题 Java 时光树洞的按时间发送顺序是怎么做的 ,rabbitmq 的"后入先出"
2019-12-05 17:29:42 +08:00
回复了 wuzhizuiguo 创建的主题 Java 时光树洞的按时间发送顺序是怎么做的 ,rabbitmq 的"后入先出"
暂时准备用把数据放到 zset 和 mysql 里, spring boot 里 跑一个间隔 1 秒的定时器, 根据 score 值排序 把等于或小于当前时间的数据取出来发送,(再删除这些发送过的)
2019-12-05 17:26:24 +08:00
回复了 wuzhizuiguo 创建的主题 Java 时光树洞的按时间发送顺序是怎么做的 ,rabbitmq 的"后入先出"
@mango88 谢谢. 这个好.如果安装了 就可以通过设置过期时间来实现了. (就是要安装插件..)
2019-12-05 14:02:44 +08:00
回复了 star7th 创建的主题 分享创造 我做了一个创意小产品——时光树洞
@star7th 好的,谢谢楼主. 这是今天我关于这个的提问 https://www.v2ex.com/t/626130
2019-12-05 11:50:20 +08:00
回复了 wuzhizuiguo 创建的主题 Java 时光树洞的按时间发送顺序是怎么做的 ,rabbitmq 的"后入先出"
@cepczkd 谢谢. 如果没有当天写,当天就要发送的场景: 今天取出昨天的,查询排序,设置每条过期时间,写入延迟队列,发送,这个可行. 不过当天写 当天发送还是要有的..
redis zet 这个是有新提交的,就重新写入,然后根据 score 值排序, 获取需要发送的消息. 这个可以
2019-12-05 11:22:22 +08:00
回复了 wuzhizuiguo 创建的主题 Java 时光树洞的按时间发送顺序是怎么做的 ,rabbitmq 的"后入先出"
@skypyb 好的,谢谢. 是这个参数 message.getMessageProperties().setExpiration, 设置每条消息的过期时间. 现在如果每条消息设置同样的过期时间,A,B,C...都是 10 秒, 或者过期时间依次递增 10 秒,11 秒... 已经实现了. 会按过期时间顺序从死信队列里,然后进入 exchange 绑定的消费队列. 但是如果邮件发送时间 有 2 天后,1 天后,3 天后 这种 1 天后就得等 2 天后这条过期了,才会轮到它..
2019-12-05 11:10:10 +08:00
回复了 wuzhizuiguo 创建的主题 Java 时光树洞的按时间发送顺序是怎么做的 ,rabbitmq 的"后入先出"
@skypyb 谢谢. rabbitmq 消息 TTL+死信队列 ,请问一下, 怎么实现 A 消息 10 秒过期, B 消息 5 秒过期, A 先进入队列, B 再进入, B 先出来发送邮件 . 博客上上说 , 队列进入时按照先入先出, 如果 B 过期了 还得等 A 过期了才会进入消费队列.
2019-12-05 10:21:11 +08:00
回复了 star7th 创建的主题 分享创造 我做了一个创意小产品——时光树洞
楼主,如果有大量的邮件按时间顺序准备发送. 请问下邮件发送是定时(每秒)查数据库,根据发送时间发送吗?
2019-11-19 09:57:56 +08:00
回复了 DRAYMONDHU 创建的主题 职场话题 看到对抽烟问题的激烈讨论,我自闭了
楼主这素质可以啊,至少能做到尽量不让其他人抽二手烟. 不抽烟的是希望抽烟的能不要再公共场合抽烟.
1  2  3  4  5  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3004 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 26ms · UTC 14:04 · PVG 22:04 · LAX 06:04 · JFK 09:04
Developed with CodeLauncher
♥ Do have faith in what you're doing.