Skip to content

Commit 433bc63

Browse files
author
alexVengrovsk
committed
Code for the article "Java 8’s Features"
alextrentton@gmail.com
1 parent 3896065 commit 433bc63

9 files changed

Lines changed: 374 additions & 0 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.baeldung.java_8_features;
2+
3+
/**
4+
* Created by Alex Vengr
5+
*/
6+
public class Address {
7+
8+
private String street;
9+
10+
public String getStreet() {
11+
return street;
12+
}
13+
14+
public void setStreet(String street) {
15+
this.street = street;
16+
}
17+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.baeldung.java_8_features;
2+
3+
/**
4+
* Created by Alex Vengr
5+
*/
6+
public class CustomException extends RuntimeException {
7+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.java_8_features;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
6+
/**
7+
* Created by Alex Vengrov
8+
*/
9+
public class Detail {
10+
11+
private static final List<String> PARTS = Arrays.asList("turbine", "pump");
12+
13+
public List<String> getParts() {
14+
return PARTS;
15+
}
16+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.baeldung.java_8_features;
2+
3+
import java.util.Optional;
4+
5+
/**
6+
* Created by Alex Vengrov
7+
*/
8+
public class OptionalAddress {
9+
10+
private String street;
11+
12+
public Optional<String> getStreet() {
13+
return Optional.ofNullable(street);
14+
}
15+
16+
public void setStreet(String street) {
17+
this.street = street;
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.baeldung.java_8_features;
2+
3+
import java.util.Optional;
4+
5+
/**
6+
* Created by Alex Vengrov
7+
*/
8+
public class OptionalUser {
9+
10+
private OptionalAddress address;
11+
12+
public Optional<OptionalAddress> getAddress() {
13+
return Optional.of(address);
14+
}
15+
16+
public void setAddress(OptionalAddress address) {
17+
this.address = address;
18+
}
19+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.baeldung.java_8_features;
2+
3+
import java.util.Optional;
4+
5+
/**
6+
* Created by Alex Vengrov
7+
*/
8+
public class User {
9+
10+
private String name;
11+
12+
private Address address;
13+
14+
public Address getAddress() {
15+
return address;
16+
}
17+
18+
public void setAddress(Address address) {
19+
this.address = address;
20+
}
21+
22+
public User() {
23+
}
24+
25+
public User(String name) {
26+
this.name = name;
27+
}
28+
29+
public static boolean isRealUser(User user) {
30+
return true;
31+
}
32+
33+
public String getOrThrow() {
34+
String value = null;
35+
Optional<String> valueOpt = Optional.ofNullable(value);
36+
String result = valueOpt.orElseThrow(CustomException::new).toUpperCase();
37+
return result;
38+
}
39+
40+
public boolean isLegalName(String name) {
41+
return name.length() > 3 && name.length() < 16;
42+
}
43+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.baeldung.java_8_features;
2+
3+
/**
4+
* Created by Alex Vengrov
5+
*/
6+
public interface Vehicle {
7+
8+
void moveTo(long altitude, long longitude);
9+
10+
static String producer() {
11+
return "N&F Vehicles";
12+
}
13+
14+
default long[] startPosition() {
15+
return new long[]{23, 15};
16+
}
17+
18+
default String getOverview() {
19+
return "ATV made by " + producer();
20+
}
21+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.baeldung.java_8_features;
2+
3+
/**
4+
* Created by 1 on 15.05.2016.
5+
*/
6+
public class VehicleImpl implements Vehicle {
7+
8+
@Override
9+
public void moveTo(long altitude, long longitude) {
10+
//do nothing
11+
}
12+
}
Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
package com.baeldung.java8;
2+
3+
import com.baeldung.java_8_features.*;
4+
import org.junit.Before;
5+
import org.junit.Test;
6+
import org.mockito.Mock;
7+
8+
import java.nio.file.Path;
9+
import java.nio.file.Paths;
10+
import java.util.ArrayList;
11+
import java.util.Arrays;
12+
import java.util.List;
13+
import java.util.Optional;
14+
import java.util.stream.Collectors;
15+
import java.util.stream.Stream;
16+
17+
import static org.junit.Assert.assertEquals;
18+
import static org.junit.Assert.assertFalse;
19+
import static org.junit.Assert.assertTrue;
20+
import static org.mockito.Mockito.mock;
21+
22+
/**
23+
* Created by Alex Vengrov
24+
*/
25+
public class Java8Features {
26+
27+
private List<String> list;
28+
29+
@Before
30+
public void init() {
31+
list = new ArrayList<>();
32+
list.add("One");
33+
list.add("OneAndOnly");
34+
list.add("Derek");
35+
list.add("Change");
36+
list.add("factory");
37+
list.add("justBefore");
38+
list.add("Italy");
39+
list.add("Italy");
40+
list.add("Thursday");
41+
list.add("");
42+
list.add("");
43+
}
44+
45+
@Test
46+
public void callMethods_whenExpectedResults_thenCorrect() {
47+
48+
Vehicle vehicle = new VehicleImpl();
49+
String overview = vehicle.getOverview();
50+
long[] startPosition = vehicle.startPosition();
51+
String producer = Vehicle.producer();
52+
53+
assertEquals(overview, "ATV made by N&F Vehicles");
54+
assertEquals(startPosition[0], 23);
55+
assertEquals(startPosition[1], 15);
56+
assertEquals(producer, "N&F Vehicles");
57+
}
58+
59+
@Test
60+
public void checkStreamOperations_whenWorkAsSuppose_thenCorrect() {
61+
62+
String[] arr = new String[]{"a", "b", "c"};
63+
Stream<String> streamArr = Arrays.stream(arr);
64+
Stream<String> streamOf = Stream.of("a", "b", "c");
65+
assertEquals(streamArr.count(), 3);
66+
67+
long count = list.stream().distinct().count();
68+
assertEquals(count, 9);
69+
70+
list.parallelStream().forEach(element -> doWork(element));
71+
72+
Stream<String> streamFilter = list.stream().filter(element -> element.isEmpty());
73+
assertEquals(streamFilter.count(), 2);
74+
75+
List<String> uris = new ArrayList<>();
76+
uris.add("C:\\My.txt");
77+
Stream<Path> streamMap = uris.stream().map(uri -> Paths.get(uri));
78+
assertEquals(streamMap.count(), 1);
79+
80+
List<Detail> details = new ArrayList<>();
81+
details.add(new Detail());
82+
details.add(new Detail());
83+
Stream<String> streamFlatMap = details.stream()
84+
.flatMap(detail -> detail.getParts().stream());
85+
assertEquals(streamFlatMap.count(), 4);
86+
87+
boolean isValid = list.stream().anyMatch(element -> element.contains("h"));
88+
boolean isValidOne = list.stream().allMatch(element -> element.contains("h"));
89+
boolean isValidTwo = list.stream().noneMatch(element -> element.contains("h"));
90+
assertTrue(isValid);
91+
assertFalse(isValidOne);
92+
assertFalse(isValidTwo);
93+
94+
List<Integer> integers = new ArrayList<>();
95+
integers.add(1);
96+
integers.add(1);
97+
integers.add(1);
98+
Integer reduced = integers.stream().reduce(23, (a, b) -> a + b);
99+
assertTrue(reduced == 26);
100+
101+
List<String> resultList = list.stream()
102+
.map(element -> element.toUpperCase())
103+
.collect(Collectors.toList());
104+
assertEquals(resultList.size(), list.size());
105+
assertTrue(resultList.contains(""));
106+
}
107+
108+
@Test
109+
public void checkMethodReferences_whenWork_thenCorrect() {
110+
111+
List<User> users = new ArrayList<>();
112+
users.add(new User());
113+
users.add(new User());
114+
boolean isReal = users.stream().anyMatch(u -> User.isRealUser(u));
115+
boolean isRealRef = users.stream().anyMatch(User::isRealUser);
116+
assertTrue(isReal);
117+
assertTrue(isRealRef);
118+
119+
User user = new User();
120+
boolean isLegalName = list.stream().anyMatch(user::isLegalName);
121+
assertTrue(isLegalName);
122+
123+
long count = list.stream().filter(String::isEmpty).count();
124+
assertEquals(count, 2);
125+
126+
Stream<User> stream = list.stream().map(User::new);
127+
List<User> userList = stream.collect(Collectors.toList());
128+
assertEquals(userList.size(), list.size());
129+
assertTrue(userList.get(0) instanceof User);
130+
}
131+
132+
@Test
133+
public void checkOptional_whenAsExpected_thenCorrect() {
134+
135+
Optional<String> optionalEmpty = Optional.empty();
136+
assertFalse(optionalEmpty.isPresent());
137+
138+
String str = "value";
139+
Optional<String> optional = Optional.of(str);
140+
assertEquals(optional.get(), "value");
141+
142+
Optional<String> optionalNullable = Optional.ofNullable(str);
143+
Optional<String> optionalNull = Optional.ofNullable(null);
144+
assertEquals(optionalNullable.get(), "value");
145+
assertFalse(optionalNull.isPresent());
146+
147+
List<String> listOpt = Optional.of(list).orElse(new ArrayList<>());
148+
List<String> listNull = null;
149+
List<String> listOptNull = Optional.ofNullable(listNull).orElse(new ArrayList<>());
150+
assertTrue(listOpt == list);
151+
assertTrue(listOptNull.isEmpty());
152+
153+
Optional<User> user = Optional.ofNullable(getUser());
154+
String result = user.map(User::getAddress)
155+
.map(Address::getStreet)
156+
.orElse("not specified");
157+
assertEquals(result, "1st Avenue");
158+
159+
Optional<OptionalUser> optionalUser = Optional.ofNullable(getOptionalUser());
160+
String resultOpt = optionalUser.flatMap(OptionalUser::getAddress)
161+
.flatMap(OptionalAddress::getStreet)
162+
.orElse("not specified");
163+
assertEquals(resultOpt, "1st Avenue");
164+
165+
Optional<User> userNull = Optional.ofNullable(getUserNull());
166+
String resultNull = userNull.map(User::getAddress)
167+
.map(Address::getStreet)
168+
.orElse("not specified");
169+
assertEquals(resultNull, "not specified");
170+
171+
Optional<OptionalUser> optionalUserNull = Optional.ofNullable(getOptionalUserNull());
172+
String resultOptNull = optionalUserNull.flatMap(OptionalUser::getAddress)
173+
.flatMap(OptionalAddress::getStreet)
174+
.orElse("not specified");
175+
assertEquals(resultOptNull, "not specified");
176+
177+
}
178+
179+
@Test(expected = CustomException.class)
180+
public void callMethod_whenCustomException_thenCorrect() {
181+
User user = new User();
182+
String result = user.getOrThrow();
183+
}
184+
185+
private User getUser() {
186+
User user = new User();
187+
Address address = new Address();
188+
address.setStreet("1st Avenue");
189+
user.setAddress(address);
190+
return user;
191+
}
192+
193+
private OptionalUser getOptionalUser() {
194+
OptionalUser user = new OptionalUser();
195+
OptionalAddress address = new OptionalAddress();
196+
address.setStreet("1st Avenue");
197+
user.setAddress(address);
198+
return user;
199+
}
200+
201+
private OptionalUser getOptionalUserNull() {
202+
OptionalUser user = new OptionalUser();
203+
OptionalAddress address = new OptionalAddress();
204+
address.setStreet(null);
205+
user.setAddress(address);
206+
return user;
207+
}
208+
209+
private User getUserNull() {
210+
User user = new User();
211+
Address address = new Address();
212+
address.setStreet(null);
213+
user.setAddress(address);
214+
return user;
215+
}
216+
217+
private void doWork(String string) {
218+
//just imitate an amount of work
219+
}
220+
}

0 commit comments

Comments
 (0)