gpt4 book ai didi

Java 对对象数组进行排序

转载 作者:行者123 更新时间:2023-11-30 05:50:39 25 4
gpt4 key购买 nike

我有一个成员(member)应用程序,数据将进入一个对象,然后该对象存储在数组中。我在对象中使用字符串和整数。

我正在编写一种方法来显示所有男性成员并按分数对他们进行排序,但我正在努力解决这个问题的逻辑。

我想一旦我将男性成员从主数组中取出,我可能需要创建另一个数组来存储它们,但我不太确定。

谁能帮忙。

public static void displayAllMaleMembers(){     
System.out.println("List of male members:\n");

for (int i=0; i < memberCount; i++) {
Member member = memberList[i];
if (member.getGender().equals("male") && member.getScore() > 50){
System.out.println("Name: " +member.getName());
System.out.println("Score: " +member.getScore());
System.out.println();
}
Arrays.sort(memberList, Collections.reverseOrder());
}
System.out.println("The sorted names by score are:");

for (Member member : memberList) {
System.out.println("Name: " +member.getName());
System.out.println("Handicap: " +member.getScore());
}
}

最佳答案

问题

  1. 您正在对整个 memberList 进行排序而您应该首先找到满足上述条件的所有学生,然后对列表进行一次排序。
  2. 您不应该对 memberList 进行排序在每次迭代中,因为它是错误的并且非常低效。
  3. 在打印时,您再次打印整个列表,而不仅仅是分数大于 50 的男性成员。 .

解决方案

首先,您只需要复制分数大于 50 的男性成员到列表:

List<Member> result = new ArrayList<>();
for(Member member : memberList)
if ("male".equals(member.getGender())
&& member.getScore() > 50)
result.add(member);

然后按成员(member)分数降序排序:

result.sort(Comparator.comparingInt(Member::getScore).reversed());

然后打印:

result.forEach(member -> {
System.out.println("Name: " +member.getName());
System.out.println("Score: " +member.getScore());
System.out.println();
});

完整代码:

List<Member> result = new ArrayList<>();
for(Member member : memberList)
if ("male".equals(member.getGender())
&& member.getScore() > 50)
result.add(member);

result.sort(Comparator.comparingInt(Member::getScore).reversed());
result.forEach(member -> {
System.out.println("Name: " +member.getName());
System.out.println("Score: " +member.getScore());
System.out.println();
});

由于您只想要根据某些条件对男性成员进行降序排序的结果,因此您也可以使用流方法,因为对于这种类型的用例来说,它更具可读性且更容易,即过滤,然后应用进一步的逻辑:

Arrays.stream(memberList) // create a Stream<Member>
.filter(m -> "male".equals(m.getGender()) &&
m.getScore() > 50) // retain only male members with score greater than 50
.sorted(Comparator.comparingInt(Member::getScore).reversed()) // sort based on score descending i.e. highest to lowest
.forEachOrdered(m -> {
System.out.println("Name: " +m.getName());
System.out.println("Handicap: " +m.getScore());
System.out.println();
}); // print the result
  1. Arrays.stream创建 Stream<Member>
  2. filter只保留分数大于50的男性成员
  3. sorted根据成员的分数从最高到最低对成员进行排序。
  4. forEachOrdered然后打印结果。

关于Java 对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53964730/

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