I have two classes: The main and the user classes. In the main class I wish to print out all the female users. However, when I do the comparison it replace all the genders of the other users to female too
This is the user class
package com.user;
public class User {
String name;
static Gender gender;
enum Gender{
MALE,FEMALE
}
public User(String name, Gender gender) {
super();
this.name = name;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static Gender getGender() {
return gender;
}
public static void setGender(Gender gender) {
User.gender = gender;
}
@Override
public String toString() {
return String.format("User [name= %s, gender= %s]", name,gender.toString());
}
}
The main class
public class Main {
public static void main(String[] args) {
List<User> users = new ArrayList<User>();
{
users.add(new User("Eva",Gender.FEMALE));
users.add(new User("Mike", Gender.MALE));
users.add(new User("Dave", Gender.MALE));
users.add(new User("Alice", Gender.FEMALE));
}
users.stream()
.filter(user -> Gender.FEMALE.equals(User.gender))
.collect(Collectors.toList())
.forEach(System.out::println);
}
}
Please, where did I go wrong?
You are declaring the gender
as a static member in your User
class.
edit:
To make the solution more clear for you, and combining what other contributors wrote in comments:
public class User {
String name;
Gender gender;
and then
public class Main {
public static void main(String[] args) {
List<User> users = new ArrayList<User>();
{
users.add(new User("Eva",Gender.FEMALE));
users.add(new User("Mike", Gender.MALE));
users.add(new User("Dave", Gender.MALE));
users.add(new User("Alice", Gender.FEMALE));
}
users.stream()
.filter(user -> Gender.FEMALE.equals(user.gender)) // user not User
.collect(Collectors.toList())
.forEach(System.out::println);
}
}