Skip to content

Commit 5d9d858

Browse files
committed
init project
1 parent 3039057 commit 5d9d858

File tree

12 files changed

+944
-1
lines changed

12 files changed

+944
-1
lines changed

README.md

100644100755
+3-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1-
# java8-lambda-sample
1+
# java8 sample
2+
23
java 8 lambda with actual usage scenarios
4+

pom.xml

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>wang.crick.study</groupId>
8+
<artifactId>java8-lambda-sample</artifactId>
9+
<version>1.0.0-SNAPSHOT</version>
10+
11+
<name>java8sample</name>
12+
<url>https://github.com/wangyuheng/java8-lambda-sample</url>
13+
14+
<properties>
15+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16+
<maven.compiler.source>1.8</maven.compiler.source>
17+
<maven.compiler.target>1.8</maven.compiler.target>
18+
</properties>
19+
20+
<dependencies>
21+
<dependency>
22+
<groupId>junit</groupId>
23+
<artifactId>junit</artifactId>
24+
<version>4.11</version>
25+
<scope>test</scope>
26+
</dependency>
27+
<dependency>
28+
<groupId>org.projectlombok</groupId>
29+
<artifactId>lombok</artifactId>
30+
<version>1.18.0</version>
31+
<scope>test</scope>
32+
</dependency>
33+
<dependency>
34+
<groupId>org.springframework</groupId>
35+
<artifactId>spring-core</artifactId>
36+
<version>5.0.10.RELEASE</version>
37+
<scope>test</scope>
38+
</dependency>
39+
</dependencies>
40+
41+
<build>
42+
<plugins>
43+
<plugin>
44+
<groupId>org.apache.maven.plugins</groupId>
45+
<artifactId>maven-compiler-plugin</artifactId>
46+
<configuration>
47+
<source>8</source>
48+
<target>8</target>
49+
</configuration>
50+
</plugin>
51+
</plugins>
52+
</build>
53+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package wang.crick.study.java8lambdasample;
2+
3+
/**
4+
* Hello world!
5+
*
6+
*/
7+
public class App
8+
{
9+
public static void main( String[] args )
10+
{
11+
System.out.println( "Hello World!" );
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package wang.crick.study.java8lambdasample;
2+
3+
import org.junit.Before;
4+
import org.junit.Test;
5+
6+
import java.util.Arrays;
7+
import java.util.Optional;
8+
9+
import static org.junit.Assert.assertEquals;
10+
import static org.junit.Assert.assertFalse;
11+
12+
/**
13+
* parse return
14+
* 1. default?
15+
* 2. illegalException?
16+
* 3. null?
17+
*
18+
* @author wangyuheng
19+
* @date 2018-12-17 21:59
20+
*/
21+
public class A1_Optional {
22+
23+
enum BooleanEnum {
24+
// 封装boolean
25+
TRUE(1, "是"),
26+
FALSE(0, "否");
27+
28+
29+
private Integer key;
30+
private String label;
31+
32+
BooleanEnum(Integer key, String label) {
33+
this.key = key;
34+
this.label = label;
35+
}
36+
37+
public Integer getKey() {
38+
return key;
39+
}
40+
41+
public String getLabel() {
42+
return label;
43+
}
44+
45+
public static Optional<BooleanEnum> parse(Integer key) {
46+
return Arrays.stream(values()).filter(i -> i.getKey().equals(key)).findAny();
47+
}
48+
49+
public static BooleanEnum parse(boolean bool) {
50+
return bool ? TRUE : FALSE;
51+
}
52+
53+
public static boolean exist(int key) {
54+
return Arrays.stream(values()).anyMatch(i -> i.getKey() == key);
55+
}
56+
}
57+
58+
@Before
59+
public void setUp() {
60+
System.out.println("--------------------");
61+
}
62+
63+
@Test
64+
public void parse_true_optional() {
65+
Optional<BooleanEnum> optionalBooleanEnum = BooleanEnum.parse(1);
66+
assertEquals(BooleanEnum.TRUE, optionalBooleanEnum.get());
67+
BooleanEnum.parse(1).ifPresent(System.out::println);
68+
}
69+
70+
@Test
71+
public void parse_false_optional() {
72+
Optional<BooleanEnum> optionalBooleanEnum = BooleanEnum.parse(0);
73+
assertEquals(BooleanEnum.FALSE, optionalBooleanEnum.get());
74+
BooleanEnum.parse(0).ifPresent(System.out::println);
75+
}
76+
77+
@Test
78+
public void parse_empty_optional() {
79+
Optional<BooleanEnum> optionalBooleanEnum = BooleanEnum.parse(2);
80+
assertFalse(optionalBooleanEnum.isPresent());
81+
BooleanEnum.parse(2).ifPresent(System.out::println);
82+
}
83+
84+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package wang.crick.study.java8lambdasample;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
import org.junit.Before;
8+
import org.junit.Test;
9+
10+
import java.util.Objects;
11+
import java.util.Optional;
12+
13+
import static org.junit.Assert.assertFalse;
14+
import static org.junit.Assert.assertTrue;
15+
16+
/**
17+
* optional if nested
18+
*
19+
* @author wangyuheng
20+
* @date 2018-12-17 21:59
21+
*/
22+
public class A2_OptionalMap {
23+
24+
private String username = "zhangsan";
25+
private String password = "123456";
26+
private UserPO userPO;
27+
28+
@Before
29+
public void setUp() {
30+
username = "zhangsan";
31+
password = "123456";
32+
userPO = UserPO.builder()
33+
.username(username)
34+
.password(password)
35+
.build();
36+
System.out.println("--------------------");
37+
}
38+
39+
@Test
40+
public void login_fail_when_incorrect_password() {
41+
password = "1";
42+
assertFalse(login_check_by_if(username, password).isPresent());
43+
assertFalse(login_check_by_map(username, password).isPresent());
44+
System.out.println(login_check_by_if(username, password));
45+
System.out.println(login_check_by_map(username, password));
46+
}
47+
48+
@Test
49+
public void login_success_when_incorrect_password() {
50+
assertTrue(login_check_by_if(username, password).isPresent());
51+
assertTrue(login_check_by_map(username, password).isPresent());
52+
System.out.println(login_check_by_if(username, password));
53+
System.out.println(login_check_by_map(username, password));
54+
}
55+
56+
private Optional<User> login_check_by_if(String username, String password) {
57+
Optional<UserPO> optionalUserPO = findByUsername(username);
58+
if (optionalUserPO.isPresent()) {
59+
UserPO po = optionalUserPO.get();
60+
if (password.equals(po.getPassword())) {
61+
return Optional.of(convert(po));
62+
} else {
63+
return Optional.empty();
64+
}
65+
} else {
66+
return Optional.empty();
67+
}
68+
}
69+
70+
private Optional<User> login_check_by_map(String username, String password) {
71+
return findByUsername(username)
72+
.filter(po -> Objects.equals(po.getPassword(), password))
73+
.map(this::convert);
74+
}
75+
76+
77+
private Optional<UserPO> findByUsername(String username) {
78+
return Optional.ofNullable(userPO);
79+
}
80+
81+
private User convert(UserPO po) {
82+
return User.builder()
83+
.username(po.getUsername())
84+
.password(po.getPassword())
85+
.build();
86+
}
87+
88+
@Data
89+
@Builder
90+
@AllArgsConstructor
91+
@NoArgsConstructor
92+
private static class UserPO {
93+
private String username;
94+
private String password;
95+
}
96+
97+
98+
@Data
99+
@Builder
100+
@AllArgsConstructor
101+
@NoArgsConstructor
102+
private static class User {
103+
private String username;
104+
private String password;
105+
}
106+
107+
108+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package wang.crick.study.java8lambdasample;
2+
3+
import lombok.Data;
4+
import org.junit.Before;
5+
import org.junit.Rule;
6+
import org.junit.Test;
7+
import org.junit.rules.ExpectedException;
8+
9+
import java.util.Optional;
10+
11+
import static org.junit.Assert.*;
12+
13+
/**
14+
* get().get().get()
15+
*
16+
* @author wangyuheng
17+
* @date 2018-12-17 21:59
18+
*/
19+
public class A3_OptionalStrongGetParam {
20+
21+
@Rule
22+
public ExpectedException thrown = ExpectedException.none();
23+
24+
@Before
25+
public void setUp() {
26+
System.out.println("--------------------");
27+
}
28+
29+
30+
@Test
31+
public void get_treasure_npe_when_session_null() {
32+
Exchange exchange = new Exchange();
33+
34+
thrown.expect(NullPointerException.class);
35+
exchange.getSession().getRequest().getTreasure();
36+
}
37+
38+
@Test
39+
public void get_null_treasure() {
40+
Exchange exchange = new Exchange();
41+
42+
String result1 = getTreasureIf(exchange);
43+
Optional<String> result2 = getTreasureOptionalMap(exchange);
44+
assertNull(result1);
45+
assertFalse(result2.isPresent());
46+
}
47+
48+
@Test
49+
public void get_treasure() {
50+
String treasure = "treasure";
51+
Request request = new Request();
52+
Session session = new Session();
53+
Exchange exchange = new Exchange();
54+
request.setTreasure(treasure);
55+
session.setRequest(request);
56+
exchange.setSession(session);
57+
58+
String result1 = getTreasureIf(exchange);
59+
Optional<String> result2 = getTreasureOptionalMap(exchange);
60+
assertEquals(treasure, result1);
61+
assertEquals(treasure, result2.get());
62+
63+
}
64+
65+
private String getTreasureIf(Exchange exchange) {
66+
if (null != exchange) {
67+
Session session = exchange.getSession();
68+
if (null != session) {
69+
Request request = session.getRequest();
70+
if (null != request) {
71+
return request.getTreasure();
72+
} else {
73+
return null;
74+
}
75+
} else {
76+
return null;
77+
}
78+
} else {
79+
return null;
80+
}
81+
}
82+
83+
private Optional<String> getTreasureOptionalMap(Exchange exchange) {
84+
return Optional.ofNullable(exchange)
85+
.map(Exchange::getSession)
86+
.map(Session::getRequest)
87+
.map(Request::getTreasure);
88+
}
89+
90+
@Data
91+
private static class Exchange {
92+
private Session session;
93+
}
94+
95+
@Data
96+
private static class Session {
97+
private Request request;
98+
}
99+
100+
@Data
101+
private static class Request {
102+
private String treasure;
103+
}
104+
105+
106+
}

0 commit comments

Comments
 (0)