1+ package io .github .biezhi .java8 .lambda .lesson3 ;
2+
3+ import io .github .biezhi .java8 .lambda .lesson1 .Project ;
4+
5+ import java .util .ArrayList ;
6+ import java .util .List ;
7+ import java .util .function .Function ;
8+ import java .util .function .Predicate ;
9+
10+ /**
11+ * lambdas
12+ *
13+ * @author biezhi
14+ * @date 2018/2/10
15+ */
16+ public class Lambdas {
17+
18+ public static List <Project > buildData () {
19+ List <Project > data = new ArrayList <>();
20+
21+ data .add (Project .builder ().name ("Blade" ).language ("java" ).author ("biezhi" )
22+ .stars (3500 ).description ("Lightning fast and elegant mvc framework for Java8" ).build ());
23+
24+ data .add (Project .builder ().name ("Tale" ).language ("java" ).author ("biezhi" )
25+ .stars (2600 ).description ("Best beautiful java blog, worth a try" ).build ());
26+
27+ data .add (Project .builder ().name ("Vue.js" ).language ("js" ).author ("yyx990803" )
28+ .stars (83000 ).description ("A progressive, incrementally-adoptable JavaScript framework for building UI on the web." ).build ());
29+
30+ data .add (Project .builder ().name ("Flask" ).language ("python" ).author ("pallets" )
31+ .stars (10500 ).description ("The Python micro framework for building web applications" ).build ());
32+
33+ data .add (Project .builder ().name ("Elves" ).language ("java" ).author ("biezhi" )
34+ .stars (200 ).description ("Spider" ).build ());
35+
36+ return data ;
37+ }
38+
39+ public static void main (String [] args ) {
40+ List <Project > projects = buildData ();
41+ // List<String> names = getNames(projects);
42+ // List<String> names = getNames(projects, project -> project.getStars() > 1000);
43+ List <String > names = getNames (projects , project -> project .getStars () > 1000 , project -> project .getDescription ());
44+ List <Integer > stars = getNames (projects , project -> project .getStars () > 1000 , ProjectFunction .buildStarFunction ());
45+ System .out .println (stars );
46+ // names.forEach(name -> System.out.println(name));
47+ }
48+
49+ public static List <String > getNames (List <Project > projects ) {
50+ List <String > names = new ArrayList <>();
51+ for (Project project : projects ) {
52+ names .add (project .getName ());
53+ }
54+ return names ;
55+ }
56+
57+ public static List <String > getNames (List <Project > projects , Predicate <Project > predicate ) {
58+ List <String > names = new ArrayList <>();
59+ for (Project project : projects ) {
60+ if (predicate .test (project )) {
61+ names .add (project .getName ());
62+ }
63+ }
64+ return names ;
65+ }
66+
67+ public static <R > List <R > getNames (List <Project > projects , Predicate <Project > predicate , Function <Project , R > function ) {
68+ List <R > names = new ArrayList <>();
69+ for (Project project : projects ) {
70+ if (predicate .test (project )) {
71+ names .add (function .apply (project ));
72+ }
73+ }
74+ return names ;
75+ }
76+
77+ }
78+
79+ interface ProjectFunction <R > extends Function <Project , R > {
80+
81+ static ProjectFunction <Integer > buildStarFunction () {
82+ return Project ::getStars ;
83+ }
84+
85+ }
0 commit comments