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

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions 13 src/main/java/lambdasinaction/appa/Author.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package lambdasinaction.appa;

import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Repeatable(Authors.class)
@Retention(RetentionPolicy.RUNTIME)
public @interface Author {

String name();

}
11 changes: 11 additions & 0 deletions 11 src/main/java/lambdasinaction/appa/Authors.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package lambdasinaction.appa;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Authors {

Author[] value();

}
17 changes: 17 additions & 0 deletions 17 src/main/java/lambdasinaction/appa/Book.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package lambdasinaction.appa;

import java.util.Arrays;

@Author(name = "Raoul")
@Author(name = "Mario")
@Author(name = "Alan")
public class Book {

public static void main(String[] args) {
Author[] authors = Book.class.getAnnotationsByType(Author.class);
Arrays.asList(authors).stream().forEach(a -> {
System.out.println(a.name());
});
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package lambdasinaction.chap6;
package lambdasinaction.appc;

import java.util.*;
import java.util.concurrent.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package lambdasinaction.chap6;
package lambdasinaction.appc;

import lambdasinaction.chap5.*;

Expand Down
12 changes: 12 additions & 0 deletions 12 src/main/java/lambdasinaction/appd/InnerClass.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package lambdasinaction.appd;

import java.util.function.Function;

public class InnerClass {
Function<Object, String> f = new Function<Object, String>() {
@Override
public String apply(Object obj) {
return obj.toString();
}
};
}
7 changes: 7 additions & 0 deletions 7 src/main/java/lambdasinaction/appd/Lambda.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package lambdasinaction.appd;

import java.util.function.Function;

public class Lambda {
Function<Object, String> f = obj -> obj.toString();
}
9 changes: 5 additions & 4 deletions 9 src/main/java/lambdasinaction/chap10/AsyncShop.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package lambdasinaction.chap10;

import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import static lambdasinaction.chap10.Util.delay;
import static lambdasinaction.chap10.Util.format;

import static lambdasinaction.chap10.Util.*;
import java.util.Random;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;

public class AsyncShop {

Expand Down
2 changes: 1 addition & 1 deletion 2 src/main/java/lambdasinaction/chap10/AsyncShopClient.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package lambdasinaction.chap10;

import java.util.concurrent.*;
import java.util.concurrent.Future;

public class AsyncShopClient {

Expand Down
51 changes: 15 additions & 36 deletions 51 src/main/java/lambdasinaction/chap10/BestPriceFinder.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package lambdasinaction.chap10;

import java.util.*;
import java.util.concurrent.*;
import java.util.stream.*;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class BestPriceFinder {

Expand All @@ -20,68 +25,42 @@ public Thread newThread(Runnable r) {
return t;
}
});
/*
public List<String> findPriceSequential(String product) {
return shops.stream()
.map(shop -> shop.getName() + " price is " + shop.calculatePrice(product))
.collect(Collectors.toList());
}

public List<String> findPriceParallel(String product) {
return shops.parallelStream()
.map(shop -> shop.getName() + " price is " + shop.calculatePrice(product))
.collect(Collectors.toList());
}

public List<String> findPrice(String product) {
List<CompletableFuture<String>> priceFutures =
shops.stream()
.map(shop -> CompletableFuture.supplyAsync(() -> shop.getName() + " price is "
+ shop.calculatePrice(product), executor))
.collect(Collectors.toList());

List<String> prices = priceFutures.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList());
return prices;
//return sequence(priceFutures).join();
}
/*/
public List<String> findPriceSequential(String product) {
public List<String> findPricesSequential(String product) {
return shops.stream()
.map(shop -> shop.getPrice(product))
.map(Quote::parse)
.map(Discount::applyDiscount)
.collect(Collectors.toList());
}

public List<String> findPriceParallel(String product) {
public List<String> findPricesParallel(String product) {
return shops.parallelStream()
.map(shop -> shop.getPrice(product))
.map(Quote::parse)
.map(Discount::applyDiscount)
.collect(Collectors.toList());
}

public List<String> findPrice(String product) {
List<CompletableFuture<String>> priceFutures = findPriceStream(product)
public List<String> findPricesFuture(String product) {
List<CompletableFuture<String>> priceFutures = findPricesStream(product)
.collect(Collectors.<CompletableFuture<String>>toList());

return priceFutures.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList());
}

public Stream<CompletableFuture<String>> findPriceStream(String product) {
public Stream<CompletableFuture<String>> findPricesStream(String product) {
return shops.stream()
.map(shop -> CompletableFuture.supplyAsync(() -> shop.getPrice(product), executor))
.map(future -> future.thenApply(Quote::parse))
.map(future -> future.thenCompose(quote -> CompletableFuture.supplyAsync(() -> Discount.applyDiscount(quote), executor)));
}

public void printPricesStream() {
public void printPricesStream(String product) {
long start = System.nanoTime();
CompletableFuture[] futures = findPriceStream("myPhone")
CompletableFuture[] futures = findPricesStream(product)
.map(f -> f.thenAccept(s -> System.out.println(s + " (done in " + ((System.nanoTime() - start) / 1_000_000) + " msecs)")))
.toArray(size -> new CompletableFuture[size]);
CompletableFuture.allOf(futures).join();
Expand Down
16 changes: 7 additions & 9 deletions 16 src/main/java/lambdasinaction/chap10/BestPriceFinderMain.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
package lambdasinaction.chap10;

import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;

import static java.util.stream.Collectors.toList;
import java.util.List;
import java.util.function.Supplier;

public class BestPriceFinderMain {

private static BestPriceFinder bestPriceFinder = new BestPriceFinder();

public static void main(String[] args) {
//execute("sequential", () -> bestPriceFinder.findPriceSequential("myPhone"));
//execute("parallel", () -> bestPriceFinder.findPriceParallel("myPhone"));
execute("composed CompletableFuture", () -> bestPriceFinder.findPrice("myPhone"));
//bestPriceFinder.printPricesStream();
execute("sequential", () -> bestPriceFinder.findPricesSequential("myPhone27S"));
execute("parallel", () -> bestPriceFinder.findPricesParallel("myPhone27S"));
execute("composed CompletableFuture", () -> bestPriceFinder.findPricesFuture("myPhone27S"));
bestPriceFinder.printPricesStream("myPhone27S");
}

private static void execute(String msg, Supplier<List<String>> s) {
Expand All @@ -23,4 +20,5 @@ private static void execute(String msg, Supplier<List<String>> s) {
long duration = (System.nanoTime() - start) / 1_000_000;
System.out.println(msg + " done in " + duration + " msecs");
}

}
5 changes: 2 additions & 3 deletions 5 src/main/java/lambdasinaction/chap10/Discount.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package lambdasinaction.chap10;

import java.util.*;

import static lambdasinaction.chap10.Util.*;
import static lambdasinaction.chap10.Util.delay;
import static lambdasinaction.chap10.Util.format;

public class Discount {

Expand Down
26 changes: 26 additions & 0 deletions 26 src/main/java/lambdasinaction/chap10/ExchangeService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package lambdasinaction.chap10;

import static lambdasinaction.chap10.Util.delay;

public class ExchangeService {

public enum Money {
USD(1.0), EUR(1.35387), GBP(1.69715), CAD(.92106), MXN(.07683);

private final double rate;

Money(double rate) {
this.rate = rate;
}
}

public static double getRate(Money source, Money destination) {
return getRateWithDelay(source, destination);
}

private static double getRateWithDelay(Money source, Money destination) {
delay();
return destination.rate / source.rate;
}

}
5 changes: 3 additions & 2 deletions 5 src/main/java/lambdasinaction/chap10/Shop.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package lambdasinaction.chap10;

import java.util.*;
import static lambdasinaction.chap10.Util.delay;
import static lambdasinaction.chap10.Util.format;

import static lambdasinaction.chap10.Util.*;
import java.util.Random;

public class Shop {

Expand Down
11 changes: 7 additions & 4 deletions 11 src/main/java/lambdasinaction/chap10/Util.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package lambdasinaction.chap10;

import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.*;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;

public class Util {

Expand Down
Loading
Morty Proxy This is a proxified and sanitized view of the page, visit original site.