Skip to content

Commit a9c7a38

Browse files
committed
Merge pull request java8#3 from jeffmorin/master
Technical proofing by Jean-François Morin
2 parents 46607da + 8fe642f commit a9c7a38

30 files changed

+733
-169
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package lambdasinaction.appa;
2+
3+
import java.lang.annotation.Repeatable;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
7+
@Repeatable(Authors.class)
8+
@Retention(RetentionPolicy.RUNTIME)
9+
public @interface Author {
10+
11+
String name();
12+
13+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package lambdasinaction.appa;
2+
3+
import java.lang.annotation.Retention;
4+
import java.lang.annotation.RetentionPolicy;
5+
6+
@Retention(RetentionPolicy.RUNTIME)
7+
public @interface Authors {
8+
9+
Author[] value();
10+
11+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package lambdasinaction.appa;
2+
3+
import java.util.Arrays;
4+
5+
@Author(name = "Raoul")
6+
@Author(name = "Mario")
7+
@Author(name = "Alan")
8+
public class Book {
9+
10+
public static void main(String[] args) {
11+
Author[] authors = Book.class.getAnnotationsByType(Author.class);
12+
Arrays.asList(authors).stream().forEach(a -> {
13+
System.out.println(a.name());
14+
});
15+
}
16+
17+
}

src/main/java/lambdasinaction/chap6/StreamForker.java renamed to src/main/java/lambdasinaction/appc/StreamForker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package lambdasinaction.chap6;
1+
package lambdasinaction.appc;
22

33
import java.util.*;
44
import java.util.concurrent.*;

src/main/java/lambdasinaction/chap6/StreamForkerExample.java renamed to src/main/java/lambdasinaction/appc/StreamForkerExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package lambdasinaction.chap6;
1+
package lambdasinaction.appc;
22

33
import lambdasinaction.chap5.*;
44

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package lambdasinaction.appd;
2+
3+
import java.util.function.Function;
4+
5+
public class InnerClass {
6+
Function<Object, String> f = new Function<Object, String>() {
7+
@Override
8+
public String apply(Object obj) {
9+
return obj.toString();
10+
}
11+
};
12+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package lambdasinaction.appd;
2+
3+
import java.util.function.Function;
4+
5+
public class Lambda {
6+
Function<Object, String> f = obj -> obj.toString();
7+
}

src/main/java/lambdasinaction/chap10/AsyncShop.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package lambdasinaction.chap10;
22

3-
import java.text.*;
4-
import java.util.*;
5-
import java.util.concurrent.*;
3+
import static lambdasinaction.chap10.Util.delay;
4+
import static lambdasinaction.chap10.Util.format;
65

7-
import static lambdasinaction.chap10.Util.*;
6+
import java.util.Random;
7+
import java.util.concurrent.CompletableFuture;
8+
import java.util.concurrent.Future;
89

910
public class AsyncShop {
1011

src/main/java/lambdasinaction/chap10/AsyncShopClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package lambdasinaction.chap10;
22

3-
import java.util.concurrent.*;
3+
import java.util.concurrent.Future;
44

55
public class AsyncShopClient {
66

src/main/java/lambdasinaction/chap10/BestPriceFinder.java

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package lambdasinaction.chap10;
22

3-
import java.util.*;
4-
import java.util.concurrent.*;
5-
import java.util.stream.*;
3+
import java.util.Arrays;
4+
import java.util.List;
5+
import java.util.concurrent.CompletableFuture;
6+
import java.util.concurrent.Executor;
7+
import java.util.concurrent.Executors;
8+
import java.util.concurrent.ThreadFactory;
9+
import java.util.stream.Collectors;
10+
import java.util.stream.Stream;
611

712
public class BestPriceFinder {
813

@@ -20,68 +25,42 @@ public Thread newThread(Runnable r) {
2025
return t;
2126
}
2227
});
23-
/*
24-
public List<String> findPriceSequential(String product) {
25-
return shops.stream()
26-
.map(shop -> shop.getName() + " price is " + shop.calculatePrice(product))
27-
.collect(Collectors.toList());
28-
}
29-
30-
public List<String> findPriceParallel(String product) {
31-
return shops.parallelStream()
32-
.map(shop -> shop.getName() + " price is " + shop.calculatePrice(product))
33-
.collect(Collectors.toList());
34-
}
35-
36-
public List<String> findPrice(String product) {
37-
List<CompletableFuture<String>> priceFutures =
38-
shops.stream()
39-
.map(shop -> CompletableFuture.supplyAsync(() -> shop.getName() + " price is "
40-
+ shop.calculatePrice(product), executor))
41-
.collect(Collectors.toList());
4228

43-
List<String> prices = priceFutures.stream()
44-
.map(CompletableFuture::join)
45-
.collect(Collectors.toList());
46-
return prices;
47-
//return sequence(priceFutures).join();
48-
}
49-
/*/
50-
public List<String> findPriceSequential(String product) {
29+
public List<String> findPricesSequential(String product) {
5130
return shops.stream()
5231
.map(shop -> shop.getPrice(product))
5332
.map(Quote::parse)
5433
.map(Discount::applyDiscount)
5534
.collect(Collectors.toList());
5635
}
5736

58-
public List<String> findPriceParallel(String product) {
37+
public List<String> findPricesParallel(String product) {
5938
return shops.parallelStream()
6039
.map(shop -> shop.getPrice(product))
6140
.map(Quote::parse)
6241
.map(Discount::applyDiscount)
6342
.collect(Collectors.toList());
6443
}
6544

66-
public List<String> findPrice(String product) {
67-
List<CompletableFuture<String>> priceFutures = findPriceStream(product)
45+
public List<String> findPricesFuture(String product) {
46+
List<CompletableFuture<String>> priceFutures = findPricesStream(product)
6847
.collect(Collectors.<CompletableFuture<String>>toList());
6948

7049
return priceFutures.stream()
7150
.map(CompletableFuture::join)
7251
.collect(Collectors.toList());
7352
}
7453

75-
public Stream<CompletableFuture<String>> findPriceStream(String product) {
54+
public Stream<CompletableFuture<String>> findPricesStream(String product) {
7655
return shops.stream()
7756
.map(shop -> CompletableFuture.supplyAsync(() -> shop.getPrice(product), executor))
7857
.map(future -> future.thenApply(Quote::parse))
7958
.map(future -> future.thenCompose(quote -> CompletableFuture.supplyAsync(() -> Discount.applyDiscount(quote), executor)));
8059
}
8160

82-
public void printPricesStream() {
61+
public void printPricesStream(String product) {
8362
long start = System.nanoTime();
84-
CompletableFuture[] futures = findPriceStream("myPhone")
63+
CompletableFuture[] futures = findPricesStream(product)
8564
.map(f -> f.thenAccept(s -> System.out.println(s + " (done in " + ((System.nanoTime() - start) / 1_000_000) + " msecs)")))
8665
.toArray(size -> new CompletableFuture[size]);
8766
CompletableFuture.allOf(futures).join();

0 commit comments

Comments
 (0)