[JAVA-14174] Renamed paterns to paterns-module (#12718)

* [JAVA-14174] Renamed paterns to paterns-module

* [JAVA-14174] naming fixes

Co-authored-by: panagiotiskakos <panagiotis.kakos@libra-is.com>
This commit is contained in:
panos-kakos
2022-09-19 07:44:14 +01:00
committed by GitHub
parent 368dd6de19
commit b153cff200
518 changed files with 32 additions and 32 deletions

View File

@@ -0,0 +1,2 @@
### Relevant Articles:
- [Currying in Java](https://www.baeldung.com/java-currying)

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>design-patterns-functional</artifactId>
<version>1.0</version>
<name>design-patterns-functional</name>
<packaging>jar</packaging>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>patterns-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
</project>

View File

@@ -0,0 +1,110 @@
package com.baeldung.currying;
import java.time.LocalDate;
import java.util.Objects;
import java.util.function.BiFunction;
import java.util.function.Function;
public class Letter {
private String returningAddress;
private String insideAddress;
private LocalDate dateOfLetter;
private String salutation;
private String body;
private String closing;
Letter(String returningAddress, String insideAddress, LocalDate dateOfLetter, String salutation, String body, String closing) {
this.returningAddress = returningAddress;
this.insideAddress = insideAddress;
this.dateOfLetter = dateOfLetter;
this.salutation = salutation;
this.body = body;
this.closing = closing;
}
Letter(String salutation, String body) {
this(null, null, LocalDate.now(), salutation, body, null);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Letter letter = (Letter) o;
return Objects.equals(returningAddress, letter.returningAddress) &&
Objects.equals(insideAddress, letter.insideAddress) &&
Objects.equals(dateOfLetter, letter.dateOfLetter) &&
Objects.equals(salutation, letter.salutation) &&
Objects.equals(body, letter.body) &&
Objects.equals(closing, letter.closing);
}
@Override
public int hashCode() {
return Objects.hash(returningAddress, insideAddress, dateOfLetter, salutation, body, closing);
}
@Override
public String toString() {
return "Letter{" + "returningAddress='" + returningAddress + '\'' + ", insideAddress='" + insideAddress + '\''
+ ", dateOfLetter=" + dateOfLetter + ", salutation='" + salutation + '\'' + ", body='" + body + '\''
+ ", closing='" + closing + '\'' + '}';
}
static Letter createLetter(String salutation, String body) {
return new Letter(salutation, body);
}
static BiFunction<String, String, Letter> SIMPLE_LETTER_CREATOR = //
(salutation, body) -> new Letter(salutation, body);
static Function<String, Function<String, Letter>> SIMPLE_CURRIED_LETTER_CREATOR = //
saluation -> body -> new Letter(saluation, body);
static Function<String, Function<String, Function<LocalDate, Function<String, Function<String, Function<String, Letter>>>>>> LETTER_CREATOR = //
returnAddress
-> closing
-> dateOfLetter
-> insideAddress
-> salutation
-> body
-> new Letter(returnAddress, insideAddress, dateOfLetter, salutation, body, closing);
static AddReturnAddress builder() {
return returnAddress
-> closing
-> dateOfLetter
-> insideAddress
-> salutation
-> body
-> new Letter(returnAddress, insideAddress, dateOfLetter, salutation, body, closing);
}
interface AddReturnAddress {
Letter.AddClosing withReturnAddress(String returnAddress);
}
interface AddClosing {
Letter.AddDateOfLetter withClosing(String closing);
}
interface AddDateOfLetter {
Letter.AddInsideAddress withDateOfLetter(LocalDate dateOfLetter);
}
interface AddInsideAddress {
Letter.AddSalutation withInsideAddress(String insideAddress);
}
interface AddSalutation {
Letter.AddBody withSalutation(String salutation);
}
interface AddBody {
Letter withBody(String body);
}
}

View File

@@ -0,0 +1,58 @@
package com.baeldung.currying;
import org.junit.Test;
import java.time.LocalDate;
import static com.baeldung.currying.Letter.LETTER_CREATOR;
import static com.baeldung.currying.Letter.SIMPLE_CURRIED_LETTER_CREATOR;
import static com.baeldung.currying.Letter.SIMPLE_LETTER_CREATOR;
import static org.junit.Assert.assertEquals;
public class LetterUnitTest {
private static final String BODY = "BODY";
private static final String SALUTATION = "SALUTATION";
private static final String RETURNING_ADDRESS = "RETURNING ADDRESS";
private static final String INSIDE_ADDRESS = "INSIDE ADDRESS";
private static final LocalDate DATE_OF_LETTER = LocalDate.of(2013, 3, 1);
private static final String CLOSING = "CLOSING";
private static final Letter SIMPLE_LETTER = new Letter(SALUTATION, BODY);
private static final Letter LETTER = new Letter(RETURNING_ADDRESS, INSIDE_ADDRESS, DATE_OF_LETTER, SALUTATION, BODY, CLOSING);
@Test
public void whenStaticCreateMethodIsCalled_thenaSimpleLetterIsCreated() {
assertEquals(SIMPLE_LETTER, Letter.createLetter(SALUTATION, BODY));
}
@Test
public void whenStaticBiFunctionIsCalled_thenaSimpleLetterIsCreated() {
assertEquals(SIMPLE_LETTER, SIMPLE_LETTER_CREATOR.apply(SALUTATION, BODY));
}
@Test
public void whenStaticSimpleCurriedFunctionIsCalled_thenaSimpleLetterIsCreated() {
assertEquals(SIMPLE_LETTER, SIMPLE_CURRIED_LETTER_CREATOR.apply(SALUTATION).apply(BODY));
}
@Test
public void whenStaticCurriedFunctionIsCalled_thenaLetterIsCreated() {
assertEquals(LETTER, LETTER_CREATOR
.apply(RETURNING_ADDRESS)
.apply(CLOSING)
.apply(DATE_OF_LETTER)
.apply(INSIDE_ADDRESS)
.apply(SALUTATION)
.apply(BODY));
}
@Test
public void whenStaticBuilderIsCalled_thenaLetterIsCreated() {
assertEquals(LETTER, Letter.builder()
.withReturnAddress(RETURNING_ADDRESS)
.withClosing(CLOSING)
.withDateOfLetter(DATE_OF_LETTER)
.withInsideAddress(INSIDE_ADDRESS)
.withSalutation(SALUTATION)
.withBody(BODY));
}
}