gpt4 book ai didi

java - 如何使用 lambda 表达式打印出姓名以 A - C 开头的所有男性

转载 作者:行者123 更新时间:2023-12-01 10:09:54 25 4
gpt4 key购买 nike

我目前正在java教程oracle上研究lambda的概念。为了练习 lambda 的概念,我试图提出 lambda 代码,打印出名称以 A 到 C 开头的所有男性。但是,我不知道在 -> 之后要写什么代码 在 lambda 表达式中。有人可以帮我吗?预先感谢您的帮助!

public static void printPerson(List<Person> listOfPerson, CheckPerson tester){
for(Person p : listOfPerson){
if(tester.test(p)){
p.printPerson();
}
}
}


public static void main(String[] args) {

List<Person> roster = Person.createRoster();
for (Person p : roster) {
p.printPerson();
}

System.out.println("5.1 lambda male name begin with a - c");
RosterTest.printPerson(roster,
(Person p) ->
????????????????
);
}

人员类别:

public class Person {

public enum Sex {
MALE, FEMALE
}

String name;
LocalDate birthday;
Sex gender;
String emailAddress;

Person(String nameArg, LocalDate birthdayArg,
Sex genderArg, String emailArg) {
name = nameArg;
birthday = birthdayArg;
gender = genderArg;
emailAddress = emailArg;
}

public int getAge() {
return birthday
.until(IsoChronology.INSTANCE.dateNow())
.getYears();
}

public String toString(){
return name + " " + birthday + " " + gender;
}

public void printPerson() {
System.out.println(name + ", " + this.getAge());
}

public Sex getGender() {
return gender;
}

public String getName() {
return name;
}

public String getEmailAddress() {
return emailAddress;
}

public LocalDate getBirthday() {
return birthday;
}

public static int compareByAge(Person a, Person b) {
return a.birthday.compareTo(b.birthday);
}

public static List<Person> createRoster() {

List<Person> roster = new ArrayList<>();
roster.add(
new Person(
"Fred",
IsoChronology.INSTANCE.date(1980, 6, 20),
Person.Sex.MALE,
"fred@example.com"));
roster.add(
new Person(
"Jane",
IsoChronology.INSTANCE.date(1990, 7, 15),
Person.Sex.FEMALE, "jane@example.com"));
roster.add(
new Person(
"George",
IsoChronology.INSTANCE.date(1991, 8, 13),
Person.Sex.MALE, "george@example.com"));
roster.add(
new Person(
"Bob",
IsoChronology.INSTANCE.date(2000, 9, 12),
Person.Sex.MALE, "bob@example.com"));

return roster;
}

}

最佳答案

如果你想使用lambda,你也可以使用stream:

roster.stream()
.filter(p -> p.getGender() == Sex.MALE
&& p.getName().matches("[a-cA-C].*"))
.forEach(Person::printPerson);

现在,像这样使用 matches() 对于性能来说并不是最好的,因此如果性能出现问题,可以进行改进。

关于java - 如何使用 lambda 表达式打印出姓名以 A - C 开头的所有男性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36192214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com