StreamAPI и немного регулярного выражения

89
25 февраля 2021, 14:50

Суть задачи: Получить из коллекции поток (Stream). Получить из потока коллекцию всех пользователей, имена которых не содержат чисел, вывести содержимое коллекции в консоль. С помощью потока посчитать количество юзеров у которых в именах есть числа и вывести количество в консоль. Я не могу не вывести юзеров и посчитать с помощью регулярного выражения Вот что я пробовал

package home_work_streamapi;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Home_Work_StreamAPI {
    public static void main(String[] args) {
  ArrayList<User> alu = new ArrayList<User>();
        alu.add(new User("Jack1", 23));
        alu.add(new User("Harry", 31));
        alu.add(new User("Charlie12", 18));
        alu.add(new User("Thomas", 32));
        alu.add(new User("Amelia33", 30));
        alu.add(new User("Olivia3", 19));
        alu.add(new User("Emily", 18));
        alu.add(new User("Sophie", 25));
        //        alu.stream().forEach(x -> System.out.println(x));
        alu.stream().filter(e -> e.getName().matches("[a-zA-Z]")).forEach(e -> System.out.println(e));
    }
}

Class User :

package home_work_streamapi;
import java.util.Objects;
class User {
    private String name;
    private int age;
    public User() {
    }
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public int hashCode() {
        int hash = 5;
        hash = 97 * hash + Objects.hashCode(this.name);
        hash = 97 * hash + this.age;
        return hash;
    }
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final User other = (User) obj;
        if (!Objects.equals(this.name, other.name)) {
            return false;
        }
        if (this.age != other.age) {
            return false;
        }
        return true;
    }
    @Override
    public String toString() {
        return "User{" + "name=" + name + ", age=" + age + '}';
    }
}
Answer 1

В принципе Вы все делаете правильно, кроме самих регулярок

Для проверки идей рекомендую https://regex101.com/

List<User> alu = new ArrayList<User>();
alu.add(new User("Jack1", 23));
alu.add(new User("Harry", 31));
alu.add(new User("Charlie12", 18));
alu.add(new User("Thomas", 32));
alu.add(new User("Amelia33", 30));
alu.add(new User("Olivia3", 19));
alu.add(new User("Emily", 18));
alu.add(new User("Sophie", 25));
System.out.println("\n without digits");
alu.stream().filter(e -> e.getName().matches(".*\\D")).forEach(System.out::println);
System.out.println("\n ends with digits");
alu.stream().filter(e -> e.getName().matches(".*\\d")).forEach(System.out::println);
READ ALSO
Быстрая организация работы с *.STL файлами в Java или C#

Быстрая организация работы с *.STL файлами в Java или C#

Подскажите какие-нибудь простые но эффективные технологии для считывания содержимого *STL файла, обработки этого содержимого и вывода на экран...

87
H2 db в SpringBoot не сохраняет данные

H2 db в SpringBoot не сохраняет данные

Как настроить H2 в Spring Boot для постоянного хранения данных?

120
Java Stream API: Разница между reduction и mutable reduction

Java Stream API: Разница между reduction и mutable reduction

Объясните пожалуйста разницу между reduction и mutable reductionВ документации Oracle описано, метод класса Stream reduce() это reduction, метод collect() -это mutable reduction

116
Как обрезать половину слова

Как обрезать половину слова

помогите пожалуйста мне нужно обрезать половину строки в javascript, но я не знаю самого слова, что мне делать?

119