如何简化Java代码?

如何简化Java代码?,java,for-loop,arraylist,simplify,Java,For Loop,Arraylist,Simplify,我对Java非常陌生,并被困在以下作业中。我被要求在AddressBook类中创建一个方法,该方法返回总ActivityLevel最高的Person对象 我已经创建了getSocialMediaActivityLevel()、maxValue()和findMostSocial()方法 findMostSocial方法确实返回了我想要的值,但是分配的描述中包含了这样一句话:“要求您设计一个简单的算法并将其集成到现有的类中。”看起来我使用了很多不必要的代码,但我不确定如何简化我所做的工作。非常感谢您

我对Java非常陌生,并被困在以下作业中。我被要求在AddressBook类中创建一个方法,该方法返回总ActivityLevel最高的Person对象

我已经创建了getSocialMediaActivityLevel()、maxValue()和findMostSocial()方法

findMostSocial方法确实返回了我想要的值,但是分配的描述中包含了这样一句话:“要求您设计一个简单的算法并将其集成到现有的类中。”看起来我使用了很多不必要的代码,但我不确定如何简化我所做的工作。非常感谢您的帮助

public class SocialMediaAccount {
    private String userID;
    private String websiteName;
    private String websiteURL;
    private int activityLevel; 

    public SocialMediaAccount(String userID, String websiteName, String websiteURL, int activityLevel) {
        this.userID = userID;
        this.websiteName = websiteName;
        this.websiteURL = websiteURL;
        this.activityLevel = activityLevel;
}
    public void addSocialMediaAccount(String userID, String websiteName, String websiteURL, int activityLevel) {
        SocialMediaAccount account1;  
        account1 = new SocialMediaAccount(userID, websiteName, websiteURL, activityLevel);
        socialMediaAccounts.add(account1); 
}

import java.util.ArrayList;
公共阶层人士{
私有字符串名;
私家姓;
私有字符串移动;
私人字符串电子邮件;
私人ArrayList社会中介账户;
//返回该人员的所有SocialMediaAccounts的组合ActivityLevel。
public int getSocialMediaActivityLevel(){
int-total=0;
对于(SocialMediaAccount e:socialMediaAccounts){
总计+=e.getActivityLevel();
}   
返回总数;
}

import java.util.ArrayList;
导入java.util.Collections;
公共类通讯簿{
私人ArrayList联系人;
公共通讯录(){
联系人=新的ArrayList();
}
//返回ArrayList联系人中最高的组合ActivityLevel
公共整数maxValue(){
ArrayList maxActivityLevel=新的ArrayList();
用于(人员e:联系人){
add(例如getsocialmediaaactivitylevel());
}
int maxValue=Collections.max(maxActivityLevel);
返回最大值;
}
//返回contacts ArrayList中具有最高组合ActivityLevel的Person对象
公众人物findMostSocial(){
用于(人员p:联系人){
如果(maxValue()==p.getSocialMediaActivityLevel()){
返回p;
}  
}
返回null;
}

我认为您需要的是这里的算法,以确定人员列表中社交媒体活动的最大值。因此,我建议替换您的maxValue()和findMostSocial()方法实现QuaseS排序。这里有一个可供参考的。Calss< /P>而不是计算MAX,然后搜索具有匹配级别的人,考虑通过“联系人”循环。只列出一次。您可以跟踪到目前为止看到的最大活动级别,以及达到该级别的人,并仅在列表中的下一个联系人“击败”时更新当前最佳分数。另外,还有一个简单的改进,您可以在不改变算法的情况下对当前解决方案进行改进。目前,您在findMostSocial()方法中多次计算maxLevel()。您只需执行一次,将值存储在变量中,然后将每个人的分数与之进行比较。
  import java.util.ArrayList;
  public class Person {
      private String firstName;
      private String surname;
      private String mobile;
      private String email;
      private ArrayList<SocialMediaAccount> socialMediaAccounts;

//returns the combined ActivityLevel for all the Person's SocialMediaAccounts.
    public int getSocialMediaActivityLevel(){
        int total = 0;
            for(SocialMediaAccount e : socialMediaAccounts){
                total += e.getActivityLevel();
            }   
        return total;
import java.util.ArrayList;
import java.util.Collections;
public class AddressBook {
    private ArrayList<Person> contacts;

    public AddressBook(){
        contacts = new ArrayList<>();    
    }

 //returns the highest combined ActivityLevel in the ArrayList contacts
      public int maxValue(){
          ArrayList<Integer> maxActivityLevel = new ArrayList<>();
              for(Person e : contacts){
                  maxActivityLevel.add(e.getSocialMediaActivityLevel());
              }
          int maxValue = Collections.max(maxActivityLevel);
         return maxValue;
      }

 //returns the Person object in the contacts ArrayList with the highest combined ActivityLevel
      public Person findMostSocial(){
          for(Person p: contacts){
              if(maxValue() == p.getSocialMediaActivityLevel()){
                  return p;
              }  
          }
      return null;
     }