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
15 changes: 13 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,17 @@ 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 이 부분에 구현한다.
//단어의 길이가 12자를 초과하는 단어를 추출한다.
//12자가 넘는 단어 중 길이가 긴 순서로 100개의 단어를 추출한다.
//단어 중복을 허용하지 않는다. 즉, 서로 다른 단어 100개를 추출해야 한다.
//추출한 100개의 단어를 출력한다. 모든 단어는 소문자로 출력해야 한다.

words.stream()
.filter(s -> s.length() > 12)
.sorted(Comparator.comparingInt(String::length).reversed())
.distinct()
.map(String::toLowerCase)
.forEach(System.out::println);
}

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

public static long sumOverThreeAndDouble(List<Integer> numbers) {
return 0;
return numbers.stream().filter(i -> i > 3).map(i -> i * 2).reduce(0, Integer::sum);
}
}
9 changes: 8 additions & 1 deletion src/main/java/nextstep/optional/ComputerStore.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import nextstep.optional.Computer.Soundcard;
import nextstep.optional.Computer.USB;

import java.util.Optional;

public class ComputerStore {
public static final String UNKNOWN_VERSION = "UNKNOWN";

Expand All @@ -21,6 +23,11 @@ public static String getVersion(Computer computer) {
}

public static String getVersionOptional(Computer computer) {
return null;
Optional<Computer> optionalComputer = Optional.ofNullable(computer);

return optionalComputer.map(Computer::getSoundcard)
.map(Soundcard::getUsb)
.map(USB::getVersion)
.orElse(UNKNOWN_VERSION);
}
}
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))
.findAny()
.orElseThrow(() -> new IllegalArgumentException(String.format("%s는 사칙연산에 해당하지 않는 표현식입니다.", expression)));
}
}
24 changes: 16 additions & 8 deletions src/main/java/nextstep/optional/User.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package nextstep.optional;

import java.util.Optional;

public class User {
private String name;
private Integer age;
Expand All @@ -22,18 +24,24 @@ public boolean matchName(String name) {
}

public static boolean ageIsInRange1(User user) {
boolean isInRange = false;
Optional<User> optionalUser = Optional.ofNullable(user);
return optionalUser
.filter(user1 -> user1.age != null)
.filter(User::isProperAge)
.isPresent();
}

if (user != null && user.getAge() != null
&& (user.getAge() >= 30
&& user.getAge() <= 45)) {
isInRange = true;
}
return isInRange;
private static boolean isProperAge(User user) {
return user.getAge() >= 30
&& user.getAge() <= 45;
}

public static boolean ageIsInRange2(User user) {
return false;
Optional<User> optionalUser = Optional.ofNullable(user);
return optionalUser
.filter(user1 -> user1.age != null)
.filter(User::isProperAge)
.isPresent();
}

@Override
Expand Down