Skip to content

Commit 1958808

Browse files
committed
📝 update lambda lesson1
1 parent 07d828d commit 1958808

File tree

6 files changed

+254
-1
lines changed

6 files changed

+254
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ java 8 改变了我们思考和编码的方式,在这里你可以学习到 Jav
2222
|:-----:|:--------|:-------|:-------|
2323
|第 1 课 | 课程介绍 | [哔哩哔哩](https://www.bilibili.com/video/av19287893/index_2.html#page=1) ¦ [Youtube](https://youtu.be/A733pQxiEDk) ||
2424
|第 2 课 | Java 8 的发展 | [哔哩哔哩](https://www.bilibili.com/video/av19287893/index_2.html#page=2) ¦ [Youtube](https://youtu.be/fHhgm1AZzhs) | [java8-growing](https://github.com/biezhi/learn-java8/tree/master/java8-growing/src/main/java/io/github/biezhi/java8/growing) |
25-
|第 3 课 | 理解 lambda | 哔哩哔哩 ¦ Youtube | |
25+
|第 3 课 | 理解 lambda | [哔哩哔哩](https://www.bilibili.com/video/av19287893/index_2.html#page=3) ¦ [Youtube](https://youtu.be/Epm5C8fyvsE) | [java8-growing](https://github.com/biezhi/learn-java8/tree/master/java8-lambda/src/main/java/io/github/biezhi/java8/lambda/lesson1) |
2626
|第 4 课 | 初尝 lambda | 哔哩哔哩 ¦ Youtube | |
2727
|第 5 课 | lambda 进阶 | 哔哩哔哩 ¦ Youtube | |
2828
|第 6 课 | 默认方法的妙用 | 哔哩哔哩 ¦ Youtube | |
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
package io.github.biezhi.java8.lambda.lesson1;
2+
3+
import io.github.biezhi.java8.lambda.lesson1.predicate.ProjectLanguagePredicate;
4+
import io.github.biezhi.java8.lambda.lesson1.predicate.ProjectStarPredicate;
5+
6+
import javax.swing.*;
7+
import java.awt.event.ActionEvent;
8+
import java.awt.event.ActionListener;
9+
import java.util.ArrayList;
10+
import java.util.Comparator;
11+
import java.util.List;
12+
import java.util.function.Predicate;
13+
14+
/**
15+
* 过滤 Project
16+
*
17+
* @author biezhi
18+
* @date 2018/2/9
19+
*/
20+
public class FilterProjects {
21+
22+
/**
23+
* 过滤 Java 项目
24+
*
25+
* @param projects
26+
* @return
27+
*/
28+
public static List<Project> filterJavaProjects(List<Project> projects) {
29+
List<Project> result = new ArrayList<>();
30+
for (Project project : projects) {
31+
if ("java".equals(project.getLanguage())) {
32+
result.add(project);
33+
}
34+
}
35+
return result;
36+
}
37+
38+
/**
39+
* 按语言过滤
40+
*
41+
* @param projects
42+
* @param language
43+
* @return
44+
*/
45+
public static List<Project> filterLanguageProjects(List<Project> projects, String language) {
46+
List<Project> result = new ArrayList<>();
47+
for (Project project : projects) {
48+
if (language.equals(project.getLanguage())) {
49+
result.add(project);
50+
}
51+
}
52+
return result;
53+
}
54+
55+
/**
56+
* 按语言和 star 数过滤
57+
*
58+
* @param projects
59+
* @param language
60+
* @param stars
61+
* @return
62+
*/
63+
public static List<Project> filterLanguageAndStarProjects(List<Project> projects, String language, int stars) {
64+
List<Project> result = new ArrayList<>();
65+
for (Project project : projects) {
66+
if (language.equals(project.getLanguage()) && project.getStars() > stars) {
67+
result.add(project);
68+
}
69+
}
70+
return result;
71+
}
72+
73+
/**
74+
* 按照谓词条件过滤
75+
*
76+
* @param projects
77+
* @param projectPredicate
78+
* @return
79+
*/
80+
public static List<Project> filterProjects(List<Project> projects, ProjectPredicate projectPredicate) {
81+
List<Project> result = new ArrayList<>();
82+
for (Project project : projects) {
83+
if (projectPredicate.test(project)) {
84+
result.add(project);
85+
}
86+
}
87+
return result;
88+
}
89+
90+
public static <T> List<T> filter(List<T> list, Predicate<T> predicate){
91+
List<T> result = new ArrayList<>();
92+
for (T t : list) {
93+
if(predicate.test(t)){
94+
result.add(t);
95+
}
96+
}
97+
return result;
98+
}
99+
100+
public static void main(String[] args) {
101+
List<Project> data = new ArrayList<>();
102+
103+
data.add(Project.builder().name("Blade").language("java").author("biezhi")
104+
.stars(3500).description("Lightning fast and elegant mvc framework for Java8").build());
105+
106+
data.add(Project.builder().name("Tale").language("java").author("biezhi")
107+
.stars(2600).description("Best beautiful java blog, worth a try").build());
108+
109+
data.add(Project.builder().name("Vue.js").language("js").author("yyx990803")
110+
.stars(83000).description("A progressive, incrementally-adoptable JavaScript framework for building UI on the web.").build());
111+
112+
data.add(Project.builder().name("Flask").language("python").author("pallets")
113+
.stars(10500).description("The Python micro framework for building web applications").build());
114+
115+
data.add(Project.builder().name("Elves").language("java").author("biezhi")
116+
.stars(200).description("Spider").build());
117+
118+
List<Project> projects = filterJavaProjects(data);
119+
120+
projects = filterLanguageProjects(data, "python");
121+
122+
projects = filterLanguageAndStarProjects(data, "js", 1000);
123+
124+
projects = filterProjects(data, new ProjectLanguagePredicate("python"));
125+
126+
projects = filterProjects(data, new ProjectStarPredicate(1000));
127+
128+
System.out.println(projects.size());
129+
130+
// JButton jButton = null;
131+
// jButton.addActionListener(e -> System.out.println("按钮被按下了"));
132+
133+
// 1. 值参数化:啰嗦、死板
134+
// 2. 行为参数化:简洁、灵活
135+
136+
137+
List<Project> filter = filter(data, project -> project.getStars() > 1000);
138+
139+
data.sort(Comparator.comparing(Project::getStars));
140+
141+
System.out.println(data);
142+
143+
Runnable task = () -> System.out.println("Hello World");
144+
145+
Thread t = new Thread(task);
146+
t.start();
147+
148+
}
149+
150+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.github.biezhi.java8.lambda.lesson1;
2+
3+
import lombok.Builder;
4+
import lombok.Data;
5+
6+
/**
7+
* 项目
8+
*
9+
* @author biezhi
10+
* @date 2018/2/9
11+
*/
12+
@Data
13+
@Builder
14+
public class Project {
15+
16+
/**
17+
* 项目名称
18+
*/
19+
private String name;
20+
21+
/**
22+
* 编程语言
23+
*/
24+
private String language;
25+
26+
/**
27+
* star 数
28+
*/
29+
private Integer stars;
30+
31+
/**
32+
* 描述
33+
*/
34+
private String description;
35+
36+
/**
37+
* 作者
38+
*/
39+
private String author;
40+
41+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.github.biezhi.java8.lambda.lesson1;
2+
3+
/**
4+
* 项目过滤接口
5+
*
6+
* @author biezhi
7+
* @date 2018/2/9
8+
*/
9+
public interface ProjectPredicate {
10+
11+
boolean test(Project project);
12+
13+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.github.biezhi.java8.lambda.lesson1.predicate;
2+
3+
import io.github.biezhi.java8.lambda.lesson1.Project;
4+
import io.github.biezhi.java8.lambda.lesson1.ProjectPredicate;
5+
6+
/**
7+
* 按编程语言过滤
8+
*
9+
* @author biezhi
10+
* @date 2018/2/9
11+
*/
12+
public class ProjectLanguagePredicate implements ProjectPredicate {
13+
14+
private String language;
15+
16+
public ProjectLanguagePredicate(String language) {
17+
this.language = language;
18+
}
19+
20+
@Override
21+
public boolean test(Project project) {
22+
return language.equals(project.getLanguage());
23+
}
24+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.github.biezhi.java8.lambda.lesson1.predicate;
2+
3+
import io.github.biezhi.java8.lambda.lesson1.Project;
4+
import io.github.biezhi.java8.lambda.lesson1.ProjectPredicate;
5+
6+
/**
7+
* 按 star 数过滤
8+
*
9+
* @author biezhi
10+
* @date 2018/2/9
11+
*/
12+
public class ProjectStarPredicate implements ProjectPredicate {
13+
14+
private Integer stars;
15+
16+
public ProjectStarPredicate(Integer stars) {
17+
this.stars = stars;
18+
}
19+
20+
@Override
21+
public boolean test(Project project) {
22+
return project.getStars() > stars;
23+
}
24+
25+
}

0 commit comments

Comments
 (0)