Skip to content

Commit 7d8dfc6

Browse files
chenmchenm
chenm
authored and
chenm
committed
init
0 parents  commit 7d8dfc6

File tree

1,200 files changed

+99152
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,200 files changed

+99152
-0
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
target/
2+
.idea/
3+
**/target/

ch01-introduction/pom.xml

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
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+
<parent>
6+
<artifactId>functional-programming-in-java</artifactId>
7+
<groupId>com.matrix</groupId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>ch01-introduction</artifactId>
13+
14+
<dependencies>
15+
<dependency>
16+
<groupId>com.matrix</groupId>
17+
<artifactId>fpjava-common</artifactId>
18+
<version>${version}</version>
19+
</dependency>
20+
</dependencies>
21+
22+
</project>

ch01-introduction/src/.DS_Store

6 KB
Binary file not shown.

ch01-introduction/src/main/.DS_Store

6 KB
Binary file not shown.
6 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.fpinjava.introduction.listing01_01;
2+
3+
public class CreditCard {
4+
5+
private int total;
6+
7+
public void charge(int price) {
8+
this.total += price;
9+
}
10+
11+
public int getTotal() {
12+
return total;
13+
}
14+
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.fpinjava.introduction.listing01_01;
2+
3+
public class Donut {
4+
5+
public static final int price = 2;
6+
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.fpinjava.introduction.listing01_01;
2+
3+
public class DonutShop {
4+
5+
public static Donut buyDonut(CreditCard creditCard) {
6+
Donut donut = new Donut();
7+
creditCard.charge(Donut.price);
8+
return donut;
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.fpinjava.introduction.listing01_02;
2+
3+
public class CreditCard {
4+
5+
public void charge(int price) {
6+
// Charge the credit card
7+
}
8+
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.fpinjava.introduction.listing01_02;
2+
3+
public class Donut {
4+
5+
public static final int price = 2;
6+
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.fpinjava.introduction.listing01_02;
2+
3+
public class DonutShop {
4+
5+
public static Tuple<Donut, Payment> buyDonut(CreditCard creditCard) {
6+
return new Tuple<>(new Donut(), new Payment(creditCard, Donut.price));
7+
}
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.fpinjava.introduction.listing01_02;
2+
3+
public class Payment {
4+
5+
public final CreditCard creditCard;
6+
public final int amount;
7+
8+
public Payment(CreditCard creditCard, int amount) {
9+
this.creditCard = creditCard;
10+
this.amount = amount;
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.fpinjava.introduction.listing01_02;
2+
3+
public class Tuple<T, U> {
4+
5+
public final T _1;
6+
public final U _2;
7+
8+
public Tuple(T t, U u) {
9+
this._1 = t;
10+
this._2 = u;
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.fpinjava.introduction.listing01_03;
2+
3+
public class CreditCard {
4+
5+
public void charge(int price) {
6+
// Charge the credit card
7+
}
8+
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.fpinjava.introduction.listing01_03;
2+
3+
public class Donut {
4+
5+
public static final int price = 2;
6+
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.fpinjava.introduction.listing01_03;
2+
3+
import com.fpinjava.common.Tuple;
4+
5+
public class DonutShop {
6+
7+
public static Tuple<Donut, Payment> buyDonut(CreditCard creditCard) {
8+
return new Tuple<>(new Donut(), new Payment(creditCard, Donut.price));
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.fpinjava.introduction.listing01_03;
2+
3+
public class Payment {
4+
5+
public final CreditCard creditCard;
6+
public final int amount;
7+
8+
public Payment(CreditCard creditCard, int amount) {
9+
this.creditCard = creditCard;
10+
this.amount = amount;
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.fpinjava.introduction.listing01_03;
2+
3+
public class Tuple<T, U> {
4+
5+
public final T _1;
6+
public final U _2;
7+
8+
public Tuple(T t, U u) {
9+
this._1 = t;
10+
this._2 = u;
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.fpinjava.introduction.listing01_04;
2+
3+
public class CreditCard {
4+
5+
public void charge(int price) {
6+
// Charge the credit card
7+
}
8+
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.fpinjava.introduction.listing01_04;
2+
3+
public class Donut {
4+
5+
public static final int price = 2;
6+
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.fpinjava.introduction.listing01_04;
2+
3+
import com.fpinjava.common.Tuple;
4+
5+
public class DonutShop {
6+
7+
public static Tuple<Donut, Payment> buyDonut(final CreditCard cc) {
8+
return new Tuple<>(new Donut(), new Payment(cc, Donut.price));
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.fpinjava.introduction.listing01_04;
2+
3+
4+
public class Payment {
5+
6+
public final CreditCard creditCard;
7+
public final int amount;
8+
9+
public Payment(CreditCard creditCard, int amount) {
10+
this.creditCard = creditCard;
11+
this.amount = amount;
12+
}
13+
14+
public Payment combine(Payment payment) {
15+
if (creditCard.equals(payment.creditCard)) {
16+
return new Payment(creditCard, amount + payment.amount);
17+
} else {
18+
throw new IllegalStateException("Cards don't match.");
19+
}
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.fpinjava.introduction.listing01_05;
2+
3+
public class CreditCard {
4+
5+
public void charge(int price) {
6+
// Charge the credit card
7+
}
8+
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.fpinjava.introduction.listing01_05;
2+
3+
public class Donut {
4+
5+
public static final int price = 2;
6+
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.fpinjava.introduction.listing01_05;
2+
3+
import static com.fpinjava.common.List.fill;
4+
import com.fpinjava.common.List;
5+
import com.fpinjava.common.Tuple;
6+
7+
public class DonutShop {
8+
9+
public static Tuple<Donut, Payment> buyDonut(final CreditCard creditCard) {
10+
return new Tuple<>(new Donut(), new Payment(creditCard, Donut.price));
11+
}
12+
13+
public static Tuple<List<Donut>, Payment> buyDonuts(final int quantity,
14+
final CreditCard creditCard) {
15+
return new Tuple<>(fill(quantity, Donut::new),
16+
new Payment(creditCard, Donut.price * quantity));
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.fpinjava.introduction.listing01_05;
2+
3+
4+
public class Payment {
5+
6+
public final CreditCard creditCard;
7+
public final int amount;
8+
9+
public Payment(CreditCard creditCard, int amount) {
10+
this.creditCard = creditCard;
11+
this.amount = amount;
12+
}
13+
14+
public Payment combine(Payment payment) {
15+
if (creditCard.equals(payment.creditCard)) {
16+
return new Payment(creditCard, amount + payment.amount);
17+
} else {
18+
throw new IllegalStateException("Cards don't match.");
19+
}
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.fpinjava.introduction.listing01_06;
2+
3+
public class CreditCard {
4+
5+
public void charge(int price) {
6+
// Charge the credit card
7+
}
8+
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.fpinjava.introduction.listing01_06;
2+
3+
public class Donut {
4+
5+
public static final int price = 2;
6+
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.fpinjava.introduction.listing01_06;
2+
3+
import static com.fpinjava.common.List.fill;
4+
import com.fpinjava.common.List;
5+
import com.fpinjava.common.Tuple;
6+
7+
public class DonutShop {
8+
9+
public static Tuple<Donut, Payment> buyDonut(final CreditCard cc) {
10+
return new Tuple<>(new Donut(), new Payment(cc, Donut.price));
11+
}
12+
13+
public static Tuple<List<Donut>, Payment> buyDonuts(final int n,
14+
final CreditCard creditCard) {
15+
return new Tuple<>(fill(n, Donut::new),
16+
new Payment(creditCard, Donut.price * n));
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.fpinjava.introduction.listing01_06;
2+
3+
import com.fpinjava.common.List;
4+
5+
public class Payment {
6+
7+
public final CreditCard creditCard;
8+
public final int amount;
9+
10+
public Payment(CreditCard creditCard, int amount) {
11+
this.creditCard = creditCard;
12+
this.amount = amount;
13+
}
14+
15+
public Payment combine(Payment payment) {
16+
if (creditCard.equals(payment.creditCard)) {
17+
return new Payment(creditCard, amount + payment.amount);
18+
} else {
19+
throw new IllegalStateException("Cards don't match.");
20+
}
21+
}
22+
23+
public static List<Payment> groupByCard(List<Payment> payments) {
24+
return payments
25+
.groupBy(x -> x.creditCard)
26+
.values()
27+
.map(x -> x.reduce(c1 -> c1::combine));
28+
}
29+
}

ch01-introduction/src/test/.DS_Store

6 KB
Binary file not shown.
6 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.fpinjava.introduction.listing01_01;
2+
3+
import static org.junit.Assert.*;
4+
import static com.fpinjava.introduction.listing01_01.DonutShop.buyDonut;
5+
6+
import org.junit.Test;
7+
8+
import com.fpinjava.introduction.listing01_01.Donut;
9+
import com.fpinjava.introduction.listing01_01.CreditCard;
10+
11+
public class DonutShopTest {
12+
13+
@Test
14+
public void testBuyCoffee() {
15+
CreditCard crediCard = new CreditCard();
16+
buyDonut(crediCard);
17+
buyDonut(crediCard);
18+
assertEquals(Donut.price * 2, crediCard.getTotal());
19+
}
20+
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.fpinjava.introduction.listing01_02;
2+
3+
import static org.junit.Assert.*;
4+
5+
import org.junit.Test;
6+
7+
public class DonutShopTest {
8+
9+
@Test
10+
public void testBuyDonut() {
11+
CreditCard creditCard = new CreditCard();
12+
Tuple<Donut, Payment> purchase = DonutShop.buyDonut(creditCard);
13+
assertEquals(Donut.price, purchase._2.amount);
14+
assertEquals(creditCard, purchase._2.creditCard);
15+
}
16+
}

0 commit comments

Comments
 (0)