提交 b81dcf30 编写于 作者: M Mars Liu

fixed index if something been dropped

上级 5fa899dc
{ {
"keywords": [], "keywords": [],
"children": [] "children": [],
"node_id": "java-461a08a44ae845018b7f0356ea928085"
} }
\ No newline at end of file
{ {
"keywords": [], "keywords": [],
"children": [] "children": [],
"node_id": "java-a02b334b2e364161badae34636a0284f"
} }
\ No newline at end of file
{ {
"keywords": [], "keywords": [],
"children": [] "children": [],
"node_id": "java-5d28bfbed25f4ae2b4d21fc1f2222e49"
} }
\ No newline at end of file
{ {
"keywords": [], "keywords": [],
"children": [] "children": [],
"node_id": "java-b06b5b2c7a6b44cc87744168729b31e6"
} }
\ No newline at end of file
{ {
"keywords": [], "keywords": [],
"children": [] "children": [],
"node_id": "java-e06f6fb888f940b4894e835d9afc9138"
} }
\ No newline at end of file
{
"node_id": "java-e7f48c927ca6465dbdd3af4c4d795441",
"keywords": [],
"children": [],
"export": [],
"title": "测试使用Lambda的方法的行为"
}
\ No newline at end of file
{
"node_id": "java-6d6fd33e57cd48f9b76243f7ba534f0d",
"keywords": [],
"children": [],
"export": [],
"title": "将复杂的Lambda表达式分为不同的方法"
}
\ No newline at end of file
{
"node_id": "java-4ce628b8b7eb483faa286ee8d3000573",
"keywords": [],
"children": [
{
"函数式接口": {
"keywords": [],
"children": [],
"node_id": "java-f079f0add4d44e6bbc108f5189827c56",
"title": "函数式接口"
}
},
{
"函数描述符": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "函数描述符"
}
}
],
"export": [],
"title": "在哪里以及如何使用Lambda"
}
\ No newline at end of file
{
"node_id": "java-1cd095cedaae4df0abc6760f425f2157",
"keywords": [],
"children": [
{
"第 1 步:记得行为参数化": {
"keywords": [],
"children": [],
"node_id": "java-a2abd41288974a7bb1e4870e3a1dcd12",
"title": "第 1 步:记得行为参数化"
}
},
{
"第 2 步:使用函数式接口来传递行为": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第 2 步:使用函数式接口来传递行为"
}
},
{
"第 3 步:执行一个行为": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第 3 步:执行一个行为"
}
},
{
"第 4 步:传递Lambda": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
],
"export": [],
"title": "把Lambda付诸实践:环绕执行模式"
}
\ No newline at end of file
{
"node_id": "java-b4495bc9b8694eda8bf27c699d795f76",
"keywords": [],
"children": [
{
"比较器复合": {
"keywords": [],
"children": [],
"node_id": "java-76960eb8ee414dca8ea8082fe41df360",
"title": "比较器复合"
}
},
{
"谓词复合": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "谓词复合"
}
},
{
"函数复合": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "函数复合"
}
}
],
"export": [],
"title": "复合Lambda表达式的有用方法"
}
\ No newline at end of file
{
"node_id": "java-4e36ec97875946d0b23b1fe9aa162925",
"keywords": [],
"children": [
{
"积分": {
"keywords": [],
"children": [],
"node_id": "java-e7c688fbe3174abf890b1c47cfcfbf7b",
"title": "积分"
}
},
{
"与Java 8的Lambda联系起来": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "与Java 8的Lambda联系起来"
}
}
],
"export": [],
"title": "数学中的类似思想"
}
\ No newline at end of file
{
"node_id": "java-e32903621c3145bdb7664eb20537cd16",
"keywords": [],
"children": [],
"export": [],
"title": "测试可见Lambda函数的行为"
}
\ No newline at end of file
...@@ -1881,49 +1881,34 @@ ...@@ -1881,49 +1881,34 @@
} }
}, },
{ {
"输入和输出": { "类和接口": {
"node_id": "java-64b6e35bfb53488a9ed0abae657a4000", "node_id": "java-e06f6fb888f940b4894e835d9afc9138",
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"InputStream类型": { "类和面向对象": {
"node_id": "java-fc2dfe1a80f64143b4ad339378ba61da", "node_id": "java-461a08a44ae845018b7f0356ea928085",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"OutputStream类型": { "抽象类": {
"node_id": "java-cc8c2e511db54a2ca2ee798f2cdbd03b", "node_id": "java-a02b334b2e364161badae34636a0284f",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"读取输入": { "接口": {
"node_id": "java-602feb8538b7419aa660c552c3a40884", "node_id": "java-5d28bfbed25f4ae2b4d21fc1f2222e49",
"keywords": [],
"children": []
}
}
]
}
},
{
"添加属性和有用的接口": {
"node_id": "java-4e35103c4b4043ee8f0fd4abe2fb0776",
"keywords": [],
"children": [
{
"通过FilterInputStream从InputStream读取": {
"node_id": "java-823a70a13c2b4adfa75de69821f05e84",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"通过FilterOutPutStream向OutputStream写入": { "匿名类": {
"node_id": "java-f6539c97ec184d74b6da9c00f1352830", "node_id": "java-b06b5b2c7a6b44cc87744168729b31e6",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
...@@ -1932,27 +1917,27 @@ ...@@ -1932,27 +1917,27 @@
} }
}, },
{ {
"Reader和Writer": { "输入和输出": {
"node_id": "java-32396d02d16640b49e4bfc6beee5b2f2", "node_id": "java-64b6e35bfb53488a9ed0abae657a4000",
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"数据的来源和去处": { "InputStream类型": {
"node_id": "java-a9ae14246ec447fb969860752ddfc947", "node_id": "java-fc2dfe1a80f64143b4ad339378ba61da",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"更改流的行为": { "OutputStream类型": {
"node_id": "java-4cbbcc28c12644b38b2f3c67aa77b814", "node_id": "java-cc8c2e511db54a2ca2ee798f2cdbd03b",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"未发生变化的类": { "读取输入": {
"node_id": "java-5841af2d0b914d9b98c9c686a21721b7", "node_id": "java-602feb8538b7419aa660c552c3a40884",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
...@@ -1961,55 +1946,27 @@ ...@@ -1961,55 +1946,27 @@
} }
}, },
{ {
"IO的典型使用方式": { "Reader和Writer": {
"node_id": "java-d81cdb255d3e448895c5d0ae11cc4a31", "node_id": "java-32396d02d16640b49e4bfc6beee5b2f2",
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"缓冲的输入文件": { "数据的来源和去处": {
"node_id": "java-b2e5b25889674bc7a9d623a1004f249b", "node_id": "java-a9ae14246ec447fb969860752ddfc947",
"keywords": [],
"children": []
}
},
{
"从内存中输入": {
"node_id": "java-b7c5859c1d11403598c1e51ab5705167",
"keywords": [],
"children": []
}
},
{
"格式化的内存输入": {
"node_id": "java-c2fbb86d10e14734a40d055b27922e8b",
"keywords": [],
"children": []
}
},
{
"基本文件输出": {
"node_id": "java-e43aad7888f646fda05d997ac91d3ed0",
"keywords": [],
"children": []
}
},
{
"存储和恢复数据": {
"node_id": "java-6204262ce42842e6808e0933cea39741",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"读取和写入随机访问文件": { "更改流的行为": {
"node_id": "java-38f4f339ea78438b8fa150e9ae9a165b", "node_id": "java-4cbbcc28c12644b38b2f3c67aa77b814",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"管道流": { "未发生变化的类": {
"node_id": "java-5c0990c32ac741ff91599274d2ed98e3", "node_id": "java-5841af2d0b914d9b98c9c686a21721b7",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
...@@ -2032,99 +1989,12 @@ ...@@ -2032,99 +1989,12 @@
] ]
} }
}, },
{
"标准IO": {
"node_id": "java-7cacdc5775454c959b9374d65811537b",
"keywords": [],
"children": [
{
"从标准输入中读取": {
"node_id": "java-b129db04d5944bd28646849bdeb02915",
"keywords": [],
"children": []
}
},
{
"将System.out转换成PrintWriter": {
"node_id": "java-7e1fa0fd153441e98a8fc6228715366c",
"keywords": [],
"children": []
}
},
{
"标准IO重定向": {
"node_id": "java-3cec01a35955478499952ffc662f21a9",
"keywords": [],
"children": []
}
}
]
}
},
{ {
"进程控制": { "进程控制": {
"node_id": "java-f7c6d831a9084704a3e91ec91a8e6d7b", "node_id": "java-f7c6d831a9084704a3e91ec91a8e6d7b",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
},
{
"压缩": {
"node_id": "java-bd599e5bf2c44f3eb73a06218c4a1d4c",
"keywords": [],
"children": [
{
"用GZIP进行简单压缩": {
"node_id": "java-10cc94d63a0e4804846f0b8f2d90bd58",
"keywords": [],
"children": []
}
},
{
"用Zip进行多文件存储": {
"node_id": "java-4f965ba95d8d4950a6f83a52c2271a9f",
"keywords": [],
"children": []
}
},
{
"Java档案文件": {
"node_id": "java-728e8731910f4289adbe110a5db754dd",
"keywords": [],
"children": []
}
}
]
}
},
{
"Preferences": {
"node_id": "java-17e2f1ba71b9419283e7669fcdd455ec",
"keywords": [],
"children": []
}
},
{
"系统环境变量": {
"node_id": "java-263ac3e02d10409a9f489674667f8ea5",
"keywords": [],
"children": [
{
"PATH环境变量": {
"node_id": "java-836b88c6e1ee46e8b01bbd843b0c8971",
"keywords": [],
"children": []
}
},
{
"CLASSPATH环境变量": {
"node_id": "java-d8c0b7ac10d04711b99c7538b89a97bd",
"keywords": [],
"children": []
}
}
]
}
} }
] ]
} }
...@@ -4113,160 +3983,80 @@ ...@@ -4113,160 +3983,80 @@
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"Java 8、9、10以及11的变化": { "通过行为参数化传递代码": {
"node_id": "java-25d4ebb3d7be4cffac6dcd037236093d", "node_id": "java-fb711fb0dfbb40db974476ea2d9faf9d",
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"Java怎么还在变": { "应对不断变化的需求": {
"node_id": "java-7d49748c28c3409788af802e7f520956", "node_id": "java-0a39f4040da04b8591f9b36f3c446789",
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"Java在编程语言生态系统中的位置": { "初试牛刀:筛选绿苹果": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "java-f4cd9c20134748979423d9abedc9c867", "node_id": "java-e888465b1043473fbb919fd4958e3179",
"title": "Java在编程语言生态系统中的位置" "title": "初试牛刀:筛选绿苹果"
} }
}, },
{ {
"用行为参数化把代码传递给方法": { "再展身手:把颜色作为参数": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8", "node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "用行为参数化把代码传递给方法" "title": "再展身手:把颜色作为参数"
} }
}, },
{ {
"并行与共享的可变数据": { "第三次尝试:对你能想到的每个属性做筛选": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8", "node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "并行与共享的可变数据" "title": "第三次尝试:对你能想到的每个属性做筛选"
}
},
{
"Java需要演变": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
} }
} }
] ]
} }
}, },
{ {
"Java中的函数": { "行为参数化": {
"node_id": "java-05c92e1e24e846c4913d04fbd6325c2e", "node_id": "java-3a05a505cd514579a52321f0c945d577",
"keywords": [],
"children": []
}
},
{
"对付啰唆": {
"node_id": "java-b121d453fc544e188b9ad50476c22f59",
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"方法和Lambda作为一等值": { "匿名类": {
"keywords": [], "keywords": [],
"children": [ "children": [],
{ "node_id": "java-afe49e9037d946b2934d38fa45bfc80d",
"从Java程序中调用C函数": { "title": "匿名类"
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "从Java程序中调用C函数"
}
},
{
"数值参数与返回值": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "数值参数与返回值"
}
},
{
"字符串参数": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"访问域": {
"keywords": [],
"children": [
{
"访问静态域": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"编码签名": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"调用Java方法": {
"keywords": [],
"children": [
{
"静态方法": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"构造器": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"另一种方法调用": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"访问数组元素": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"使用调用API": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
],
"node_id": "java-52208b387a6f49f3849728c431d1d2b1",
"title": "方法和Lambda作为一等值"
} }
}, },
{ {
"传递代码:一个例子": { "第五次尝试:使用匿名类": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8" "node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第五次尝试:使用匿名类"
}
},
{
"第六次尝试:使用Lambda表达式": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第六次尝试:使用Lambda表达式"
} }
}, },
{ {
"从传递方法到Lambda": { "第七次尝试:将List类型抽象化": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8" "node_id": "569d5e11c4fc5de7844053d9a733c5e8"
...@@ -4276,182 +4066,12 @@ ...@@ -4276,182 +4066,12 @@
} }
}, },
{ {
"默认方法及Java模块": { "真实的例子": {
"node_id": "java-38c6e6f21c72455db7e643d24d0f9828", "node_id": "java-db33d9c7f2004cdbbc058254fe536ace",
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"不断演进的API": { "用Comparator来排序": {
"keywords": [],
"children": [
{
"初始版本的API": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "初始版本的API"
}
},
{
"第二版API": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第二版API"
}
}
],
"node_id": "java-e10b062feb77493f994a19aee0fba38a",
"title": "不断演进的API"
}
},
{
"概述默认方法": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"默认方法的使用模式": {
"keywords": [],
"children": [
{
"行为的多继承": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"解决冲突的规则": {
"keywords": [],
"children": [
{
"选择提供了最具体实现的默认方法的接口": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"冲突及如何显式地消除歧义": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
]
}
},
{
"来自函数式编程的其他好思想": {
"node_id": "java-0df3f7d9c17a49d98247619bea4706e8",
"keywords": [],
"children": []
}
}
]
}
},
{
"通过行为参数化传递代码": {
"node_id": "java-fb711fb0dfbb40db974476ea2d9faf9d",
"keywords": [],
"children": [
{
"应对不断变化的需求": {
"node_id": "java-0a39f4040da04b8591f9b36f3c446789",
"keywords": [],
"children": [
{
"初试牛刀:筛选绿苹果": {
"keywords": [],
"children": [],
"node_id": "java-e888465b1043473fbb919fd4958e3179",
"title": "初试牛刀:筛选绿苹果"
}
},
{
"再展身手:把颜色作为参数": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "再展身手:把颜色作为参数"
}
},
{
"第三次尝试:对你能想到的每个属性做筛选": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第三次尝试:对你能想到的每个属性做筛选"
}
}
]
}
},
{
"行为参数化": {
"node_id": "java-3a05a505cd514579a52321f0c945d577",
"keywords": [],
"children": []
}
},
{
"对付啰唆": {
"node_id": "java-b121d453fc544e188b9ad50476c22f59",
"keywords": [],
"children": [
{
"匿名类": {
"keywords": [],
"children": [],
"node_id": "java-afe49e9037d946b2934d38fa45bfc80d",
"title": "匿名类"
}
},
{
"第五次尝试:使用匿名类": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第五次尝试:使用匿名类"
}
},
{
"第六次尝试:使用Lambda表达式": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第六次尝试:使用Lambda表达式"
}
},
{
"第七次尝试:将List类型抽象化": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
]
}
},
{
"真实的例子": {
"node_id": "java-db33d9c7f2004cdbbc058254fe536ace",
"keywords": [],
"children": [
{
"用Comparator来排序": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "java-a218b2a634d34529b4b65991e217632c", "node_id": "java-a218b2a634d34529b4b65991e217632c",
...@@ -4493,75 +4113,12 @@ ...@@ -4493,75 +4113,12 @@
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"Lambda管中窥豹": { "Lambda概念": {
"node_id": "java-f19e427139fc4f1b881ce286e0b0e4f6", "node_id": "java-f19e427139fc4f1b881ce286e0b0e4f6",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{
"在哪里以及如何使用Lambda": {
"node_id": "java-4ce628b8b7eb483faa286ee8d3000573",
"keywords": [],
"children": [
{
"函数式接口": {
"keywords": [],
"children": [],
"node_id": "java-f079f0add4d44e6bbc108f5189827c56",
"title": "函数式接口"
}
},
{
"函数描述符": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "函数描述符"
}
}
]
}
},
{
"把Lambda付诸实践:环绕执行模式": {
"node_id": "java-1cd095cedaae4df0abc6760f425f2157",
"keywords": [],
"children": [
{
"第 1 步:记得行为参数化": {
"keywords": [],
"children": [],
"node_id": "java-a2abd41288974a7bb1e4870e3a1dcd12",
"title": "第 1 步:记得行为参数化"
}
},
{
"第 2 步:使用函数式接口来传递行为": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第 2 步:使用函数式接口来传递行为"
}
},
{
"第 3 步:执行一个行为": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "第 3 步:执行一个行为"
}
},
{
"第 4 步:传递Lambda": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
]
}
},
{ {
"使用函数式接口": { "使用函数式接口": {
"node_id": "java-24d804bc97ba47d0ba5798a35eb7a4bd", "node_id": "java-24d804bc97ba47d0ba5798a35eb7a4bd",
...@@ -4658,84 +4215,7 @@ ...@@ -4658,84 +4215,7 @@
} }
}, },
{ {
"复合Lambda表达式的有用方法": { "高阶函数": {
"node_id": "java-b4495bc9b8694eda8bf27c699d795f76",
"keywords": [],
"children": [
{
"比较器复合": {
"keywords": [],
"children": [],
"node_id": "java-76960eb8ee414dca8ea8082fe41df360",
"title": "比较器复合"
}
},
{
"谓词复合": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "谓词复合"
}
},
{
"函数复合": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "函数复合"
}
}
]
}
},
{
"数学中的类似思想": {
"node_id": "java-4e36ec97875946d0b23b1fe9aa162925",
"keywords": [],
"children": [
{
"积分": {
"keywords": [],
"children": [],
"node_id": "java-e7c688fbe3174abf890b1c47cfcfbf7b",
"title": "积分"
}
},
{
"与Java 8的Lambda联系起来": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "与Java 8的Lambda联系起来"
}
}
]
}
},
{
"测试可见Lambda函数的行为": {
"node_id": "java-e32903621c3145bdb7664eb20537cd16",
"keywords": [],
"children": []
}
},
{
"测试使用Lambda的方法的行为": {
"node_id": "java-e7f48c927ca6465dbdd3af4c4d795441",
"keywords": [],
"children": []
}
},
{
"将复杂的Lambda表达式分为不同的方法": {
"node_id": "java-6d6fd33e57cd48f9b76243f7ba534f0d",
"keywords": [],
"children": []
}
},
{
"高阶函数的测试": {
"node_id": "java-a7c7ebe0698741e0a6adea161a5139a6", "node_id": "java-a7c7ebe0698741e0a6adea161a5139a6",
"keywords": [], "keywords": [],
"children": [] "children": []
...@@ -4745,43 +4225,14 @@ ...@@ -4745,43 +4225,14 @@
} }
}, },
{ {
"流简介": { "流": {
"node_id": "java-9f8b0da343fd415c9b29380647b0f1f8", "node_id": "java-9f8b0da343fd415c9b29380647b0f1f8",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"流操作": { "收集器": {
"node_id": "java-e892b3c6bfd44a3ea622f8c16de44279",
"keywords": [],
"children": [
{
"中间操作": {
"node_id": "java-d63b136fa11f4690a394643e5f9b8ea6",
"keywords": [],
"children": []
}
},
{
"终端操作": {
"node_id": "java-c078722ba9bf41efbe97772bb97398b2",
"keywords": [],
"children": []
}
}
]
}
},
{
"路线图": {
"node_id": "java-cc77eee8c1e3461f8af178e2bad8617b",
"keywords": [],
"children": []
}
},
{
"收集器简介": {
"node_id": "java-0f1fc49b2e1c41368403ca2239810920", "node_id": "java-0f1fc49b2e1c41368403ca2239810920",
"keywords": [], "keywords": [],
"children": [ "children": [
...@@ -4874,328 +4325,80 @@ ...@@ -4874,328 +4325,80 @@
"采用防御式检查减少NullPointerException": { "采用防御式检查减少NullPointerException": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "java-710beac55f7c4ce58da66d9ebc319dd4", "node_id": "java-710beac55f7c4ce58da66d9ebc319dd4",
"title": "采用防御式检查减少NullPointerException" "title": "采用防御式检查减少NullPointerException"
}
},
{
"其他语言中null的替代品": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "其他语言中null的替代品"
}
}
]
}
},
{
"Optional类入门": {
"node_id": "java-d329521188284298b68e7d7d56c66557",
"keywords": [],
"children": []
}
},
{
"应用Optional的几种模式": {
"node_id": "java-c73d3483b19e4d64a3c5bf802bb0f2c6",
"keywords": [],
"children": [
{
"创建Optional对象": {
"keywords": [],
"children": [],
"node_id": "java-9843c864f2b848129407ac2d6ecfaacd",
"title": "创建Optional对象"
}
},
{
"使用map从Optional对象中提取和转换值": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "使用map从Optional对象中提取和转换值"
}
},
{
"使用flatMap链接Optional对象": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "使用flatMap链接Optional对象"
}
},
{
"操纵由Optional对象构成的Stream": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"默认行为及解引用Optional对象": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"两个Optional对象的组合": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"使用filter剔除特定的值": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
]
}
}
]
}
},
{
"Java模块系统": {
"node_id": "java-81c079af472746fc838268974b43dc55",
"keywords": [],
"children": [
{
"exports子句": {
"node_id": "java-b705d45009d84a609f9d8dd33935db31",
"keywords": [],
"children": []
}
},
{
"requires子句": {
"node_id": "java-6aca051fce684c6c838c281e1e35b0fc",
"keywords": [],
"children": []
}
},
{
"命名": {
"node_id": "java-300060ee7a04460685a0f3a359555ad1",
"keywords": [],
"children": []
}
},
{
"requires": {
"node_id": "java-ad66a2df96f248539164e359391e6e63",
"keywords": [],
"children": []
}
},
{
"exports": {
"node_id": "java-46cbc0a256454505906afa98f3052cbb",
"keywords": [],
"children": []
}
},
{
"requires的传递": {
"node_id": "java-bf2afd6975e6426884923be9ab6c5083",
"keywords": [],
"children": []
}
},
{
"exports to": {
"node_id": "java-c96aa563cbc84d5eaad4dbe8f025eaf4",
"keywords": [],
"children": []
}
},
{
"open和opens": {
"node_id": "java-9b28ed31512b49e7ad8fb99a3345a678",
"keywords": [],
"children": []
}
},
{
"uses和provides": {
"node_id": "java-fb13f5492e4e4eed9d83aca71bd9a9c4",
"keywords": [],
"children": []
}
},
{
"多模块项目": {
"node_id": "java-da75bc8b6b0d471184961e44a5e4025f",
"keywords": [],
"children": []
}
},
{
"编译及打包": {
"node_id": "java-02891816ef1e4421abda7f2e2fa300ba",
"keywords": [],
"children": []
}
},
{
"自动模块": {
"node_id": "java-7a6f0097d06c47f180e1d8ede54722e7",
"keywords": [],
"children": []
}
},
{
"模块声明及子句": {
"node_id": "java-91dc218d58244a70bbc610043cf8a597",
"keywords": [],
"children": []
}
}
]
}
},
{
"servlet": {
"node_id": "java-d6b6b41615d44d3eac35276c5e9d5956",
"keywords": [],
"children": [
{
"背景": {
"node_id": "java-57b111f13f0c4bf8945ed80a53dec67d",
"keywords": [],
"children": []
}
},
{
"servelet的生命周期": {
"node_id": "java-4ce9d845f79d4c80b586cef342a77456",
"keywords": [],
"children": []
}
},
{
"servlet开发选项": {
"node_id": "java-829440781d824fc4a7b2752d23a7e428",
"keywords": [],
"children": []
}
},
{
"使用Tomcat": {
"node_id": "java-5bc983be3eb84a65b213839e2cba1e4d",
"keywords": [],
"children": []
}
},
{
"一个简单的servlet": {
"node_id": "java-05f577b2d66d42d8a9c9034703ae7ec0",
"keywords": [],
"children": [
{
"创建和编译servlet源代码": {
"keywords": [],
"children": [],
"node_id": "java-992278332e0a4b04a6016b4a9b9f3036",
"title": "创建和编译servlet源代码"
}
},
{
"启动Tomcat": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "启动Tomcat"
} }
}, },
{ {
"启动Web浏览器并请求servlet": { "其他语言中null的替代品": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8", "node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "启动Web浏览器并请求servlet" "title": "其他语言中null的替代品"
} }
} }
] ]
} }
}, },
{ {
"Servlet API": { "Optional类入门": {
"node_id": "java-e0749c1fc7114c7c83fe30a6cd19b73a", "node_id": "java-d329521188284298b68e7d7d56c66557",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"javax.servlet包": { "应用Optional的几种模式": {
"node_id": "java-3460d1de87ae44af893531872dc49e4c", "node_id": "java-c73d3483b19e4d64a3c5bf802bb0f2c6",
"keywords": [], "keywords": [],
"children": [ "children": [
{ {
"Servlet接口": { "创建Optional对象": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "java-6c0006656ecb4f26b635f14f0e80bf75", "node_id": "java-9843c864f2b848129407ac2d6ecfaacd",
"title": "Servlet接口" "title": "创建Optional对象"
} }
}, },
{ {
"ServletConfig接口": { "使用map从Optional对象中提取和转换值": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8", "node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "ServletConfig接口" "title": "使用map从Optional对象中提取和转换值"
} }
}, },
{ {
"ServletContext接口": { "使用flatMap链接Optional对象": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8", "node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "ServletContext接口" "title": "使用flatMap链接Optional对象"
}
},
{
"ServletRequest接口": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"ServletResponse接口": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
} }
}, },
{ {
"GenericServlet类": { "操纵由Optional对象构成的Stream": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8" "node_id": "569d5e11c4fc5de7844053d9a733c5e8"
} }
}, },
{ {
"ServletInputStream类": { "默认行为及解引用Optional对象": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8" "node_id": "569d5e11c4fc5de7844053d9a733c5e8"
} }
}, },
{ {
"ServletOutputStream类": { "两个Optional对象的组合": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8" "node_id": "569d5e11c4fc5de7844053d9a733c5e8"
} }
}, },
{ {
"servlet异常类": { "使用filter剔除特定的值": {
"keywords": [], "keywords": [],
"children": [], "children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8" "node_id": "569d5e11c4fc5de7844053d9a733c5e8"
...@@ -5203,94 +4406,102 @@ ...@@ -5203,94 +4406,102 @@
} }
] ]
} }
}
]
}
},
{
"Java模块系统": {
"node_id": "java-81c079af472746fc838268974b43dc55",
"keywords": [],
"children": [
{
"exports子句": {
"node_id": "java-b705d45009d84a609f9d8dd33935db31",
"keywords": [],
"children": []
}
}, },
{ {
"读取servlet参数": { "requires子句": {
"node_id": "java-0b185754b3334e05893f70db71a7918d", "node_id": "java-6aca051fce684c6c838c281e1e35b0fc",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"javax.servlet.http包": { "命名": {
"node_id": "java-5e7e698cfd634c4187e554449b025900", "node_id": "java-300060ee7a04460685a0f3a359555ad1",
"keywords": [], "keywords": [],
"children": [ "children": []
{
"HttpServletRequest接口": {
"keywords": [],
"children": [],
"node_id": "java-06e15dacbaf849dd81db512f4bb35b4e",
"title": "HttpServletRequest接口"
}
},
{
"HttpServletResponse接口": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "HttpServletResponse接口"
}
},
{
"HttpSession接口": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "HttpSession接口"
}
},
{
"Cookie类": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"HttpServlet类": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
]
} }
}, },
{ {
"处理HTTP请求和响应": { "requires": {
"node_id": "java-9d66bec8e5c748e58cce215f91ff329a", "node_id": "java-ad66a2df96f248539164e359391e6e63",
"keywords": [], "keywords": [],
"children": [ "children": []
{ }
"处理HTTP GET请求": { },
"keywords": [], {
"children": [], "exports": {
"node_id": "java-ec58b97c02e14425a7680a12a9ac240b", "node_id": "java-46cbc0a256454505906afa98f3052cbb",
"title": "处理HTTP GET请求" "keywords": [],
} "children": []
}, }
{ },
"处理HTTP POST请求": { {
"keywords": [], "requires的传递": {
"children": [], "node_id": "java-bf2afd6975e6426884923be9ab6c5083",
"node_id": "569d5e11c4fc5de7844053d9a733c5e8", "keywords": [],
"title": "处理HTTP POST请求" "children": []
} }
} },
] {
"exports to": {
"node_id": "java-c96aa563cbc84d5eaad4dbe8f025eaf4",
"keywords": [],
"children": []
}
},
{
"open和opens": {
"node_id": "java-9b28ed31512b49e7ad8fb99a3345a678",
"keywords": [],
"children": []
}
},
{
"uses和provides": {
"node_id": "java-fb13f5492e4e4eed9d83aca71bd9a9c4",
"keywords": [],
"children": []
}
},
{
"多模块项目": {
"node_id": "java-da75bc8b6b0d471184961e44a5e4025f",
"keywords": [],
"children": []
}
},
{
"编译及打包": {
"node_id": "java-02891816ef1e4421abda7f2e2fa300ba",
"keywords": [],
"children": []
} }
}, },
{ {
"使用cookie": { "自动模块": {
"node_id": "java-13a9bddaa0e34a1bb4b5fdad77a38f55", "node_id": "java-7a6f0097d06c47f180e1d8ede54722e7",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
}, },
{ {
"会话跟踪": { "模块声明及子句": {
"node_id": "java-cfccde6970c84de2a4ad0a94f06b50a9", "node_id": "java-91dc218d58244a70bbc610043cf8a597",
"keywords": [], "keywords": [],
"children": [] "children": []
} }
...@@ -5414,146 +4625,6 @@ ...@@ -5414,146 +4625,6 @@
] ]
} }
}, },
{
"CompletableFuture:组合式异步编程": {
"node_id": "java-6ce6d4e5e7ba41a9ba7b8c6a93f174b9",
"keywords": [],
"children": [
{
"实现异步API": {
"node_id": "java-4d530336323e47c2a9b4473063c89e67",
"keywords": [],
"children": [
{
"将同步方法转换为异步方法": {
"keywords": [],
"children": [],
"node_id": "java-1bd8d8d138eb45739c40bc5c534bd0a5",
"title": "将同步方法转换为异步方法"
}
},
{
"错误处理": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "错误处理"
}
}
]
}
},
{
"让你的代码免受阻塞之苦": {
"node_id": "java-eda0cce01a764ea1af3de7c9a9fcabf1",
"keywords": [],
"children": [
{
"使用并行流对请求进行并行操作": {
"keywords": [],
"children": [],
"node_id": "java-3aa25f53bb134905b6ecf0206a3a9305",
"title": "使用并行流对请求进行并行操作"
}
},
{
"使用CompletableFuture发起异步请求": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "使用CompletableFuture发起异步请求"
}
},
{
"寻找更好的方案": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "寻找更好的方案"
}
},
{
"使用定制的执行器": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
]
}
},
{
"对多个异步任务进行流水线操作": {
"node_id": "java-c59f3c1a87dc471db307703cc818c11c",
"keywords": [],
"children": [
{
"实现折扣服务": {
"keywords": [],
"children": [],
"node_id": "java-36803626c8094af197a30359644590fb",
"title": "实现折扣服务"
}
},
{
"使用Discount服务": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "使用Discount服务"
}
},
{
"构造同步和异步操作": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8",
"title": "构造同步和异步操作"
}
},
{
"将两个CompletableFuture对象整合起来,无论它们是否存在依赖": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"对Future和Completable-Future的回顾": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
},
{
"高效地使用超时机制": {
"keywords": [],
"children": [],
"node_id": "569d5e11c4fc5de7844053d9a733c5e8"
}
}
]
}
},
{
"响应CompletableFuture的completion事件": {
"node_id": "java-ca42f0965c5e4a8898e44cfbe9b43180",
"keywords": [],
"children": [
{
"对最佳价格查询器应用的优化": {
"keywords": [],
"children": [],
"node_id": "java-4907ef223e2a4683b14a32e1edaae11f",
"title": "对最佳价格查询器应用的优化"
}
}
]
}
}
]
}
},
{ {
"反应式编程": { "反应式编程": {
"node_id": "java-0969aecf77a7416ba0fed596b2569a23", "node_id": "java-0969aecf77a7416ba0fed596b2569a23",
......
...@@ -119,7 +119,8 @@ class TreeWalker: ...@@ -119,7 +119,8 @@ class TreeWalker:
level_path = os.path.join(self.root, level) level_path = os.path.join(self.root, level)
num, config = self.load_level_node(level_path) num, config = self.load_level_node(level_path)
levels.append((num, config)) levels.append((num, config))
levels.sort(key=lambda item: item[0])
levels = self.resort_children(self.root, levels)
root_node["children"] = [item[1] for item in levels] root_node["children"] = [item[1] for item in levels]
return root_node return root_node
...@@ -145,7 +146,7 @@ class TreeWalker: ...@@ -145,7 +146,7 @@ class TreeWalker:
num, chapter = self.load_chapter_node(full_name) num, chapter = self.load_chapter_node(full_name)
chapters.append((num, chapter)) chapters.append((num, chapter))
chapters.sort(key=lambda item: item[0]) chapters = self.resort_children(base, chapters)
level_node["children"] = [item[1] for item in chapters] level_node["children"] = [item[1] for item in chapters]
return level_node return level_node
...@@ -157,10 +158,21 @@ class TreeWalker: ...@@ -157,10 +158,21 @@ class TreeWalker:
num, section = self.load_section_node(full_name) num, section = self.load_section_node(full_name)
sections.append((num, section)) sections.append((num, section))
sections.sort(key=lambda item: item[0]) sections = self.resort_children(base, sections)
chapter_node["children"] = [item[1] for item in sections] chapter_node["children"] = [item[1] for item in sections]
return chapter_node return chapter_node
def resort_children(self, base, children):
children.sort(key=lambda item: item[0])
for index, [number, element] in enumerate(children):
title = list(element.keys())[0]
origin = os.path.join(base, f"{number}.{title}")
posted = os.path.join(base, f"{index+1}.{title}")
if origin != posted:
self.logger.info(f"rename [{origin}] to [{posted}]")
os.rename(origin, posted)
return children
def ensure_chapters(self): def ensure_chapters(self):
for subdir in os.listdir(self.root): for subdir in os.listdir(self.root):
self.ensure_level_config(subdir) self.ensure_level_config(subdir)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册