使用 .equals() 比较枚举值替换被比较的字符串
Comparing enum values using .equals() replaces the string being compared
我有两个 classes:主 classes 和用户 classes。
主要 class 我希望打印出所有女性用户。但是,当我进行比较时,它也将其他用户的所有性别都替换为女性
这是用户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());
}
}
主要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);
}
}
请问我哪里错了?
您在 User
class 中将 gender
声明为静态成员。
编辑:
为了让您的解决方案更清晰,并结合其他贡献者在评论中写的内容:
public class User {
String name;
Gender gender;
然后
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);
}
}
我有两个 classes:主 classes 和用户 classes。 主要 class 我希望打印出所有女性用户。但是,当我进行比较时,它也将其他用户的所有性别都替换为女性
这是用户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());
}
}
主要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);
}
}
请问我哪里错了?
您在 User
class 中将 gender
声明为静态成员。
编辑:
为了让您的解决方案更清晰,并结合其他贡献者在评论中写的内容:
public class User {
String name;
Gender gender;
然后
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);
}
}