Functional
Stream: filter で条件に合う値を残す
filter は元の List を変更せず、条件を満たす要素だけを流します。
SourcePositiveNumbers.java
Java 21
package examples.stream;
import java.util.List;
public final class PositiveNumbers {
private PositiveNumbers() {}
public static List<Integer> onlyPositive(List<Integer> values) {
return values.stream().filter(value -> value > 0).toList();
}
}TestPositiveNumbersTest.java
Java 21
package examples.stream;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
class PositiveNumbersTest {
@Test
void filterは正の数だけを残す() {
assertEquals(List.of(3, 8), PositiveNumbers.onlyPositive(List.of(-2, 3, 0, 8)));
}
@Test
void filterは入力のListを変更しない() {
var values = new ArrayList<>(List.of(-2, 3));
PositiveNumbers.onlyPositive(values);
assertEquals(List.of(-2, 3), values);
}
}01Assertion
このテストで確認できること
- 正の整数だけを結果に残す
- 入力の List は変更されない
Stream の filter は中間操作です。toList で終端操作を実行して、新しい結果を得ます。
OBSERVED RESULT
expected: [1, 3]
actual: [1, 3]