Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d7f6e94

Browse files
author
wangyuheng
committed
init project
1 parent 3039057 commit d7f6e94

File tree

12 files changed

+944
-1
lines changed

12 files changed

+944
-1
lines changed

‎README.md

100644100755
Lines changed: 3 additions & 1 deletion
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

Lines changed: 53 additions & 0 deletions
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>
Lines changed: 13 additions & 0 deletions
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+
}
Lines changed: 84 additions & 0 deletions
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+
}
Lines changed: 108 additions & 0 deletions
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+
}
Lines changed: 106 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /