Skip to content
Open
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
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@ dependencies {
compileOnly 'org.projectlombok:lombok:+',
'edu.washington.cs.types.checker:checker-framework:+'

testCompile 'org.junit.jupiter:junit-jupiter-api:+',
testCompile 'org.junit.jupiter:junit-jupiter-api:5.0.0-M3',
'org.hamcrest:java-hamcrest:+'
}
45 changes: 40 additions & 5 deletions src/test/java/lambda/part1/exercise/Lambdas01Exercise.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import data.Person;
import org.junit.jupiter.api.Test;

import java.util.Comparator;
import java.util.List;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;

class Lambdas01Exercise {

Expand All @@ -21,11 +23,24 @@ void sortPersonsByAge() {

// TODO use Arrays.sort

assertArrayEquals(persons, new Person[]{
// Java 7
// Arrays.sort(persons, new Comparator<Person>() {
// @Override
// public int compare(Person o1, Person o2) {
// return o1.getAge() - o2.getAge();
// }
// });

// Java 8
persons = Stream.of(persons)
.sorted(Comparator.comparing(Person::getAge))
.toArray(Person[]::new);

assertThat(persons, is(new Person[]{
new Person("name 3", "lastName 3", 20),
new Person("name 2", "lastName 1", 30),
new Person("name 1", "lastName 2", 40),
});
}));
}

@Test
Expand All @@ -40,6 +55,26 @@ void findFirstWithAge30() {

// TODO use FluentIterable

assertEquals(person, new Person("name 1", "lastName 2", 30));
// Java 7
// final Optional<Person> personOptional =
// FluentIterable.from(persons)
// .firstMatch(new Predicate<Person>() {
// @Override
// public boolean apply(Person p) {
// return p.getAge() == 30;
// }
// });
//
// if(personOptional.isPresent())
// person = personOptional.get();

// Java 8
person = persons.stream()
.filter(p -> p.getAge() ==30)
.findFirst()
.orElse(new Person("n","ln", 99999));

assertThat(person, is(new Person("name 1", "lastName 2", 30)));
}
}

12 changes: 12 additions & 0 deletions src/test/java/lambda/part1/exercise/Lambdas02Exercise.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package lambda.part1.exercise;

import com.google.common.base.Optional;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import data.Person;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertArrayEquals;
Expand All @@ -20,6 +23,8 @@ void sortPersonsByAge() {

// TODO use Arrays.sort

Arrays.sort(persons, (p1, p2) -> p1.getAge() - p2.getAge());

assertArrayEquals(persons, new Person[]{
new Person("name 3", "lastName 3", 20),
new Person("name 2", "lastName 1", 30),
Expand All @@ -39,6 +44,13 @@ void findFirstWithAge30() {

// TODO use FluentIterable

final Optional<Person> personOptional =
FluentIterable.from(persons)
.firstMatch(p -> p.getAge() == 30);

if(personOptional.isPresent())
person = personOptional.get();

assertEquals(person, new Person("name 1", "lastName 2", 30));
}
}
23 changes: 16 additions & 7 deletions src/test/java/lambda/part2/exercise/ArrowNotationExercise.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
package lambda.part2.exercise;

import static org.junit.jupiter.api.Assertions.assertEquals;

import data.Person;
import org.junit.jupiter.api.Test;

import java.util.StringJoiner;
import java.util.function.BiFunction;
import java.util.function.BiPredicate;
import java.util.function.Function;

import static org.junit.jupiter.api.Assertions.assertEquals;

class ArrowNotationExercise {

@Test
void getAge() {
// Person -> Integer
final Function<Person, Integer> getAge = null; // TODO
final Function<Person, Integer> getAge = Person::getAge; // TODO

assertEquals(Integer.valueOf(33), getAge.apply(new Person("", "", 33)));
}
Expand All @@ -22,9 +24,9 @@ void getAge() {
void compareAges() {
// TODO use BiPredicate
// compareAges: (Person, Person) -> boolean
BiPredicate<Person, Person> compareAges = (p1, p2) -> p1.getAge() == p2.getAge();

throw new UnsupportedOperationException("Not implemented");
//assertEquals(true, compareAges.test(new Person("a", "b", 22), new Person("c", "d", 22)));
assertEquals(true, compareAges.test(new Person("a", "b", 22), new Person("c", "d", 22)));
}

// TODO
Expand All @@ -37,11 +39,18 @@ void compareAges() {
@Test
void getAgeOfPersonWithTheLongestFullName() {
// Person -> String
final Function<Person, String> getFullName = null; // TODO
final Function<Person, String> getFullName =
p -> new StringJoiner(p.getFirstName())
.add(p.getLastName())
.toString();

// (Person, Person) -> Integer
// TODO use ageOfPersonWithTheLongestFullName(getFullName)
final BiFunction<Person, Person, Integer> ageOfPersonWithTheLongestFullName = null;
final BiFunction<Person, Person, Integer> ageOfPersonWithTheLongestFullName =
(p1, p2) -> getFullName.apply(p1).length()>getFullName.apply(p2).length()
?p1.getAge()
:p2.getAge();


assertEquals(
Integer.valueOf(1),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package lambda.part2.exercise;

import static org.junit.jupiter.api.Assertions.assertEquals;

import data.Person;
import org.junit.jupiter.api.Test;

import java.util.function.Predicate;

import static org.junit.jupiter.api.Assertions.assertEquals;

class FunctionCombinationExercise {

@Test
Expand All @@ -22,19 +22,14 @@ void personHasNotEmptyLastNameAndFirstName0() {
// TODO
// negate1: (Person -> boolean) -> (Person -> boolean)
private Predicate<Person> negate1(Predicate<Person> test) {
return p -> {
// TODO
throw new UnsupportedOperationException();
};
// TODO
return p -> test.negate().test(p);
}

// TODO
// validateFirstNameAndLastName: (Person -> boolean, Person -> boolean) -> (Person -> boolean)
private Predicate<Person> validateFirstNameAndLastName(Predicate<Person> t1, Predicate<Person> t2) {
return p -> {
// TODO
throw new UnsupportedOperationException();
};
return p -> t1.and(t2).test(p);
}

@Test
Expand All @@ -56,25 +51,25 @@ void personHasNotEmptyLastNameAndFirstName1() {
// negate: (T -> boolean) -> (T -> boolean)
private <T> Predicate<T> negate(Predicate<T> test) {
// TODO
throw new UnsupportedOperationException();
return t -> test.negate().test(t);
}

// TODO
// and: (T -> boolean, T -> boolean) -> (T -> boolean)
private <T> Predicate<T> and(Predicate<T> t1, Predicate<T> t2) {
// TODO
throw new UnsupportedOperationException();
return t -> t1.and(t2).test(t);
}

@Test
void personHasNotEmptyLastNameAndFirstName2() {
final Predicate<Person> hasEmptyFirstName = p -> p.getFirstName().isEmpty();
final Predicate<Person> hasEmptyLastName = p -> p.getLastName().isEmpty();

final Predicate<Person> validateFirstName = null; // TODO use negate
final Predicate<Person> validateLastName = null; // TODO use negate
final Predicate<Person> validateFirstName = negate(hasEmptyFirstName); // TODO use negate
final Predicate<Person> validateLastName = negate(hasEmptyLastName); // TODO use negate

final Predicate<Person> validate = null; // TODO use and
final Predicate<Person> validate = validateFirstName.and(validateLastName); // TODO use and

assertEquals(true, validate.test(new Person("a", "b", 0)));
assertEquals(false, validate.test(new Person("", "b", 0)));
Expand All @@ -86,10 +81,10 @@ void personHasNotEmptyLastNameAndFirstName3() {
final Predicate<Person> hasEmptyFirstName = p -> p.getFirstName().isEmpty();
final Predicate<Person> hasEmptyLastName = p -> p.getLastName().isEmpty();

final Predicate<Person> validateFirstName = null; // TODO use Predicate::negate
final Predicate<Person> validateLastName = null; // TODO use Predicate::negate
final Predicate<Person> validateFirstName = hasEmptyFirstName.negate(); // TODO use Predicate::negate
final Predicate<Person> validateLastName = hasEmptyLastName.negate(); // TODO use Predicate::negate

final Predicate<Person> validate = null; // TODO use Predicate::and
final Predicate<Person> validate = validateFirstName.and(validateLastName); // TODO use Predicate::and

assertEquals(true, validate.test(new Person("a", "b", 0)));
assertEquals(false, validate.test(new Person("", "b", 0)));
Expand Down
Loading