# Cheat Sheet
## Collections
- List.of(...), Set.of(...), Map.of(...), List.copyOf(...) (immutable)
`List.of(1,2,3,4,5)`
- Stream::toList()
`Stream.of(1,2,3,4,5).map(i -> i * 2).toList()`
- `IntStream.iterate(1, i -> i < 100, i -> i + 1)`
- Predicate.not
`Stream.of("foo", "", "bar").filter(not(String::isBlank))`
- Collectors.teeing(...)
`double mean = Stream.of(1, 2, 3, 4, 5).collect(Collectors.teeing(Collectors.summingDouble(i -> i), Collectors.counting(), (sum, count) -> sum / count));`
## Optionals
- Optional.ofNullable(...).stream()
`List.of(Optional.of(1), Optional.empty(), Optional.of(2), Optional.of(3)).stream().flatMap(Optional::stream).sum() == 5`
- .ifPresentOrElse()
`Optional.of(4).ifPresentOrElse(value -> System.out.printf("Value is %d", value), () -> System.out.println("No value"))`
- .isEmpty()
`Optional.ofNullable(null).isEmpty()`
## Strings
- .isBlank()
- .strip()
- .lines()
`"foo\nbar\nbaz".lines().count() == 3`
- text block """
```
String json = """
{
"foo": "bar"
}
""";
```
## Other
- switch yield
```
int j = switch (day) {
case MONDAY -> 0;
case TUESDAY -> 1;
default -> {
int k = day.toString().length();
int result = f(k);
yield result;
}
};
```
- records (immutable POJO)
```
Employee employee = new Employee(1, "John", "Doe");
Employee employeeCopy = new Employee(1, "John", "Doe");
System.out.println(employee.equals(employeeCopy));
System.out.println(employee.firstName());
public record Employee(int id, String firstName, String lastName) {}
```
- pattern matching (instanceof)
```
Object object = new Employee(1, "John", "Doe");
if (object instanceof Employee e && e.firstName().equals("John")) {
System.out.println("This is John!");
}
```