机缘
大学的时候,我哥让我去看刘未鹏《暗时间》(这本书也是作者写博客后整理的),觉得很不错。鼓励我去写博客,去分享。那时候,对写博客没想法,倒是“暗时间”的观念很好,这个中学时代也是一直在用,经常去思考题目如何解决。
毕业后参加工作,我哥又提起写博客的事情,我觉得可以去试试,开始去写,一开始写得不好,或者说内容都比较简单,感觉没深度。我找哥哥谈这个事情,他跟我说:没关系的,去做就好。不用怕内容简单,你踩过的坑,以后也会也有经历的,哪怕是记录一个软件具体怎么使用的,也行,解决了有对应困惑的小伙伴的问题,就很好。精彩和深度都是相对而言的,不要怕,不断去精进就好.....。聊完后,内心就坦然了,哪怕是常见的操作,把常见操作和问题做一个记录,对于新人来说也是也用的。 慢慢的,就开始去写博客,去分享。
收获
写博客,最大的好处是重新思考。对于学习金字塔,最有效的就是输出,而在输出中,教是最好,实践其次。在写博客的过程中,是一个实践,也算是一个教的过程(要把内容写清楚,明了),就差互动了。而在阅读金字塔中,写博客是最优。
学习金字塔
阅读金字塔
在写博客的过程中,会反思自己是否写得详细,清楚,是否好理解,在这个过程中,也加深了对知识的理解。这也是一个很好的记录,当后面再遇到类似的问题,搜下关键字,快速回顾,加深印象,后续有其它思考,也可以继续补充。
另外一个是写的内容对于别人是有益处,看到评论的感谢,觉得很好。自己慢慢也养成习惯去关注,去感谢。
日常
日常工作忙,没办法定期学习(不过刚开始学新的东西也难去分享,更多是在实践应用阶段,会有更多的思考),现在更多是把工作中遇到的一些问题,一些觉得更通用的场景做一个记录。而没有为了写博客而写博客。 也没有强制去做什么,就像刚开始练习跑步的时候,跑到快要累了就停下来,明天再继续,保持那种愉悦的心情,下次就更容易去做。
成就
在过去中,自己写得最好的一段码:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yan.web.util.treeNode.listMap1.TreeModel;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
public class TreeModelAddLevel {
public static void main(String[] args){
List<TreeModel> areaList = initData();
// 构建树形
List<TreeModel> treeModels = parseTreeModel(areaList);
System.out.println("result: "+ JSON.toJSONString(treeModels));
addLevel(0, treeModels);
System.out.println("result2: "+ JSON.toJSONString(treeModels));
}
private static void addLevel(int level, List<TreeModel> treeModels){
level++;
for (TreeModel treeModel : ListUtils.emptyIfNull(treeModels)) {
treeModel.setLevel(level);
List<TreeModel> children = treeModel.getChildren();
treeModel.setChildCount(children.size());
if(CollectionUtils.isNotEmpty(children)){
addLevel(level, children);
}
}
}
private static List<TreeModel> parseTreeModel(List<TreeModel> treeModels) {
if (CollectionUtils.isEmpty(treeModels)) {
return Collections.emptyList();
}
Map<String, List<TreeModel>> map = new HashMap<>();
treeModels.forEach(x -> {
String parentCode = x.getParentCode();
if (StringUtils.isBlank(parentCode)) {
parentCode = "-1";
}
// 如果 parentCode 没有值,生成空数组,
List<TreeModel> list = map.computeIfAbsent(parentCode, k -> new ArrayList<>());
// 如果有值,就把值取出来,相同的parentCode 放到一起
list.add(x);
});
// 从-1开始遍历
List<TreeModel> result = map.getOrDefault("-1", new ArrayList<>());
parseChildrenTreeModel(map, result);
return result;
}
private static void parseChildrenTreeModel(Map<String, List<TreeModel>> map, List<TreeModel> treeModels) {
treeModels.forEach(x -> {
x.setChildren(map.getOrDefault(x.getCode(), new ArrayList<>()));
if (!CollectionUtils.isEmpty(x.getChildren())) {
parseChildrenTreeModel(map, x.getChildren());
}
});
}
private static List<TreeModel> initData(){
String areaInfo = "[{\n" +
"\t\t\"code\": 59,\n" +
"\t\t\"parentCode\": -1,\n" +
"\t\t\"name\": \"福建\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 591,\n" +
"\t\t\"parentCode\": 59,\n" +
"\t\t\"name\": \"福州\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59101,\n" +
"\t\t\"parentCode\": 591,\n" +
"\t\t\"name\": \"鼓楼区\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59195,\n" +
"\t\t\"parentCode\": 591,\n" +
"\t\t\"name\": \"晋安区\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59196,\n" +
"\t\t\"parentCode\": 591,\n" +
"\t\t\"name\": \"马尾区\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59197,\n" +
"\t\t\"parentCode\": 591,\n" +
"\t\t\"name\": \"台江区\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59198,\n" +
"\t\t\"parentCode\": 591,\n" +
"\t\t\"name\": \"金山区\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 592,\n" +
"\t\t\"parentCode\": 59,\n" +
"\t\t\"name\": \"厦门\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59201,\n" +
"\t\t\"parentCode\": 592,\n" +
"\t\t\"name\": \"思明区\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59202,\n" +
"\t\t\"parentCode\": 592,\n" +
"\t\t\"name\": \"同安\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59203,\n" +
"\t\t\"parentCode\": 592,\n" +
"\t\t\"name\": \"杏林\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59204,\n" +
"\t\t\"parentCode\": 592,\n" +
"\t\t\"name\": \"海沧区\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59205,\n" +
"\t\t\"parentCode\": 592,\n" +
"\t\t\"name\": \"同安区\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59206,\n" +
"\t\t\"parentCode\": 592,\n" +
"\t\t\"name\": \"翔安区\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 593,\n" +
"\t\t\"parentCode\": 59,\n" +
"\t\t\"name\": \"宁德\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59301,\n" +
"\t\t\"parentCode\": 593,\n" +
"\t\t\"name\": \"宁德\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59302,\n" +
"\t\t\"parentCode\": 593,\n" +
"\t\t\"name\": \"古田\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59303,\n" +
"\t\t\"parentCode\": 593,\n" +
"\t\t\"name\": \"屏南\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59304,\n" +
"\t\t\"parentCode\": 593,\n" +
"\t\t\"name\": \"寿宁\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"code\": 59305,\n" +
"\t\t\"parentCode\": 593,\n" +
"\t\t\"name\": \"周宁\"\n" +
"\t}]";
JSONArray areaArr = JSONArray.parseArray(areaInfo);
return ListUtils.emptyIfNull(areaArr).stream().map(e -> (JSONObject) e)
.map(e -> JSONObject.parseObject(e.toString(), TreeModel.class)).collect(Collectors.toList());
}
}
因为树形数据,在平时工作中也经常用到。
憧憬
期待自己可以学更多,能力不断变强,有更深的思考,能写出更好的文章内容,再到后面可以出一些“产品”,对于自己和别人有更大的帮助。教是最好的学。
希望大家都敢于去写博客,去分享。即使无人欣赏 也别忘了给自己鼓掌