diff --git a/stream-api/pom.xml b/stream-api/pom.xml index 372e0bc..cfe1ff4 100644 --- a/stream-api/pom.xml +++ b/stream-api/pom.xml @@ -93,4 +93,4 @@ - \ No newline at end of file + diff --git a/stream-api/src/main/java/by/courses/java/streamapi/entity/UserBase.java b/stream-api/src/main/java/by/courses/java/streamapi/entity/UserBase.java index ec18879..d3d3a11 100644 --- a/stream-api/src/main/java/by/courses/java/streamapi/entity/UserBase.java +++ b/stream-api/src/main/java/by/courses/java/streamapi/entity/UserBase.java @@ -3,11 +3,26 @@ import lombok.AllArgsConstructor; import lombok.Data; +import java.util.Objects; + @Data @AllArgsConstructor(staticName = "of") public class UserBase { private String name; - private int age; -} \ No newline at end of file + private Integer age; + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + UserBase person = (UserBase) o; + return age.equals(person.age) && + name.equals(person.name); + } + + @Override + public int hashCode() { + return Objects.hash(age, name); + } +} diff --git a/stream-api/src/main/java/by/courses/java/streamapi/operation/DefaultStream.java b/stream-api/src/main/java/by/courses/java/streamapi/operation/DefaultStream.java index 0a84570..589970b 100644 --- a/stream-api/src/main/java/by/courses/java/streamapi/operation/DefaultStream.java +++ b/stream-api/src/main/java/by/courses/java/streamapi/operation/DefaultStream.java @@ -3,48 +3,49 @@ import by.courses.java.streamapi.entity.UserBase; import java.util.Collection; -import java.util.Comparator; import java.util.stream.Collectors; public class DefaultStream implements Operation { @Override public Collection removeWithMaxAge(Collection entities) { - return null; + return entities.stream().filter(user -> user.getAge() < (entities.stream().map(UserBase::getAge).mapToInt(v -> v).max().getAsInt())).collect(Collectors.toList()); } @Override public Collection removeAllOlder(Collection entities, int age) { - return null; + return entities.stream().filter(user -> user.getAge() <= age).collect(Collectors.toList()); } @Override public double getAverageAge(Collection entities) { - return 0; + return entities.stream().map(UserBase::getAge).mapToInt(v -> v).average().getAsDouble(); } @Override public UserBase getThirdInCollection(Collection entities) { - return null; + return entities.stream().skip(2).findFirst().get(); } @Override public Collection getTwoUsersStartingFromSecond(Collection entities) { - return null; + return entities.stream().skip(1).limit(2).collect(Collectors.toList()); } @Override public boolean isCharacterPresentInAllNames(Collection entities, String character) { - return false; + return entities.stream().allMatch(person -> person.getName().toLowerCase().contains(character.toLowerCase())); } @Override public Collection addValueToAllNames(Collection entities, String value) { - return null; + return entities.stream().peek(person -> person.setName(person.getName() + value)).collect(Collectors.toList()); } @Override public Collection sortByNameThanByAge(Collection entities) { - return null; + return entities.stream().sorted((p1, p2) -> + p1.getName() != p2.getName() ? p1.getName().compareTo(p2.getName()) : + p1.getAge().compareTo(p2.getAge())).collect(Collectors.toList()); } -} \ No newline at end of file +} diff --git a/stream-api/src/test/groovy/by/courses/java/streamapi/operation/StreamImplTestSpec.groovy b/stream-api/src/test/groovy/by/courses/java/streamapi/operation/StreamImplTestSpec.groovy index 53427d9..30eb7ba 100644 --- a/stream-api/src/test/groovy/by/courses/java/streamapi/operation/StreamImplTestSpec.groovy +++ b/stream-api/src/test/groovy/by/courses/java/streamapi/operation/StreamImplTestSpec.groovy @@ -123,4 +123,4 @@ class StreamImplTestSpec extends Specification { UserBase.of("Vadim", 18) ] } -} \ No newline at end of file +}