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
5 changes: 5 additions & 0 deletions src/main/java/nextstep/fp/Conditional.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package nextstep.fp;

public interface Conditional {
public boolean isTrue(int number);
}
23 changes: 7 additions & 16 deletions src/main/java/nextstep/fp/Lambda.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.List;


public class Lambda {
public static void printAllOld(List<Integer> numbers) {
System.out.println("printAllOld");
Expand All @@ -26,31 +27,21 @@ public void run() {
}).start();
}

public static int sumAll(List<Integer> numbers) {
public static int sumAll(List<Integer> numbers, Conditional condition) {
int total = 0;
for (int number : numbers) {
total += number;
if (condition.isTrue(number)) {
total += number;
}
}
return total;
}

public static int sumAllEven(List<Integer> numbers) {
int total = 0;
for (int number : numbers) {
if (number % 2 == 0) {
total += number;
}
}
return total;
return sumAll(numbers, number -> (number % 2) == 0);
}

public static int sumAllOverThree(List<Integer> numbers) {
int total = 0;
for (int number : numbers) {
if (number > 3) {
total += number;
}
}
return total;
return sumAll(numbers, number -> number > 3);
}
}
14 changes: 12 additions & 2 deletions src/main/java/nextstep/fp/StreamStudy.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

Expand All @@ -27,7 +28,13 @@ public static void printLongestWordTop100() throws IOException {
.get("src/main/resources/fp/war-and-peace.txt")), StandardCharsets.UTF_8);
List<String> words = Arrays.asList(contents.split("[\\P{L}]+"));

// TODO 이 부분에 구현한다.
words.stream()
.filter(w -> w.length() > 12)
.sorted(Comparator.comparingInt(String::length).reversed())
.distinct()
.limit(100)
.forEach(x -> System.out.println(x.toUpperCase()));

}

public static List<Integer> doubleNumbers(List<Integer> numbers) {
Expand All @@ -39,6 +46,9 @@ public static long sumAll(List<Integer> numbers) {
}

public static long sumOverThreeAndDouble(List<Integer> numbers) {
return 0;
return numbers.stream()
.filter(x -> x > 3)
.map(x -> x * 2)
.reduce(0, (x, y) -> x + y);
}
}
13 changes: 6 additions & 7 deletions src/main/java/nextstep/optional/Expression.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package nextstep.optional;

import java.util.Arrays;

enum Expression {
PLUS("+"), MINUS("-"), TIMES("*"), DIVIDE("/");

Expand All @@ -14,12 +16,9 @@ private static boolean matchExpression(Expression e, String expression) {
}

static Expression of(String expression) {
for (Expression v : values()) {
if (matchExpression(v, expression)) {
return v;
}
}

throw new IllegalArgumentException(String.format("%s는 사칙연산에 해당하지 않는 표현식입니다.", expression));
return Arrays.stream(values())
.filter(v -> matchExpression(v, expression))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException(String.format("%s는 사칙연산에 해당하지 않는 표현식입니다.", expression)));
}
}
32 changes: 24 additions & 8 deletions src/main/java/nextstep/optional/User.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package nextstep.optional;

import java.util.Optional;

public class User {

private String name;
private Integer age;

Expand Down Expand Up @@ -33,7 +36,13 @@ public static boolean ageIsInRange1(User user) {
}

public static boolean ageIsInRange2(User user) {
return false;
Optional<User> optionalUser = Optional.ofNullable(user);

return optionalUser.filter(u -> (
u.getAge() != null) &&
u.getAge() >= 30 && u.getAge() <= 45
).isPresent();

}

@Override
Expand All @@ -47,23 +56,30 @@ public int hashCode() {

@Override
public boolean equals(Object obj) {
if (this == obj)
if (this == obj) {
return true;
if (obj == null)
}
if (obj == null) {
return false;
if (getClass() != obj.getClass())
}
if (getClass() != obj.getClass()) {
return false;
}
User other = (User) obj;
if (age == null) {
if (other.age != null)
if (other.age != null) {
return false;
} else if (!age.equals(other.age))
}
} else if (!age.equals(other.age)) {
return false;
}
if (name == null) {
if (other.name != null)
if (other.name != null) {
return false;
} else if (!name.equals(other.name))
}
} else if (!name.equals(other.name)) {
return false;
}
return true;
}
}
13 changes: 7 additions & 6 deletions src/main/java/nextstep/optional/Users.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

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

public class Users {
static final User DEFAULT_USER = new User("codesquad", 100);
Expand All @@ -13,11 +14,11 @@ public class Users {
new User("honux", 45));

User getUser(String name) {
for (User user : users) {
if (user.matchName(name)) {
return user;
}
}
return DEFAULT_USER;

return users.stream()
.filter(user -> user.matchName(name))
.findFirst()
.orElse(DEFAULT_USER);

}
}
14 changes: 2 additions & 12 deletions src/test/java/nextstep/fp/CarTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,14 @@ public class CarTest {
@Test
public void 이동() {
Car car = new Car("pobi", 0);
Car actual = car.move(new MoveStrategy() {
@Override
public boolean isMovable() {
return true;
}
});
Car actual = car.move(() -> true);
assertThat(actual).isEqualTo(new Car("pobi", 1));
}

@Test
public void 정지() {
Car car = new Car("pobi", 0);
Car actual = car.move(new MoveStrategy() {
@Override
public boolean isMovable() {
return false;
}
});
Car actual = car.move(() -> false);
assertThat(actual).isEqualTo(new Car("pobi", 0));
}
}
2 changes: 1 addition & 1 deletion src/test/java/nextstep/fp/LambdaTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public void runThread() throws Exception {

@Test
public void sumAll() throws Exception {
int sum = Lambda.sumAll(numbers);
int sum = Lambda.sumAll(numbers, number -> true);
assertThat(sum).isEqualTo(21);
}

Expand Down