Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何比较对象中的字符串与ArrayList中的字符串,然后添加这些字符串的值(如果它们彼此相等)_Java_String_Object_Arraylist - Fatal编程技术网

Java 如何比较对象中的字符串与ArrayList中的字符串,然后添加这些字符串的值(如果它们彼此相等)

Java 如何比较对象中的字符串与ArrayList中的字符串,然后添加这些字符串的值(如果它们彼此相等),java,string,object,arraylist,Java,String,Object,Arraylist,如何比较保存在ArrayList中的对象中的字符串,然后添加这些字符串的值(如果它们彼此相等) 我知道如何检查StringX==StringY或StringX.equals(StringY),但我不知道如何比较ArrayList中的字符串,更不用说如何添加字符串对象中保留的双精度值(仅当该字符串相等时) 示例 BaseBallTeam类有两个属性 字符串团队成员,例如Kat 双本垒打,例如2.0 我想把所有的全垒打(双打)加起来。以及所有麦克风制作的全垒打(双人)等 这是我的密码: Arra

如何比较保存在ArrayList中的对象中的字符串,然后添加这些字符串的值(如果它们彼此相等)

我知道如何检查
StringX==StringY
StringX.equals(StringY)
,但我不知道如何比较
ArrayList
中的字符串,更不用说如何添加字符串对象中保留的双精度值(仅当该字符串相等时)

示例 BaseBallTeam类有两个属性

  • 字符串团队成员,例如Kat
  • 双本垒打,例如2.0
我想把所有的全垒打(双打)加起来。以及所有麦克风制作的全垒打(双人)等

这是我的密码:

ArrayList<BaseBallTeam> list = new ArrayList<>();
double totalRuns = 0;
for(int i = 0; i<list.size();i++){
   for(int j = 1; j<list.size();j++){        
    if(list.get(i).getTeamMember().equals(list.get(j).getTeamMember())){
       totalRuns += list.get(j).getHomeRuns() +list.get(i).getHomeRuns();
       System.out.println("Amount of " + list.get(i).getTeamMember() + "s hit " + totalRuns"home runs);
   }
}                   
ArrayList list=new ArrayList();
双总运行=0;

对于(int i=0;i您应该首先查看团队成员,然后计算他们的全垒打:

    ArrayList<BaseBallTeam> list = new ArrayList<>();
    // fill the list
    ArrayList<String> teamMembers = new ArrayList<>();
    for (int i = 0; i < list.size(); i++) {
        if (!teamMembers.contains(list.get(i).getTeamMember())) {
            teamMembers.add(list.get(i).getTeamMember());
        }
    }

    double totalRuns = 0;
    for (int i = 0; i < teamMembers.size(); i++) {
        double runs = 0;
        for (int j = 0; j < list.size(); j++) {
            if (list.get(j).getTeamMember().equals(teamMembers.get(i))) {
                runs += list.get(j).getHomeRuns();
            }
        }
        System.out.println("Amount of " + teamMembers.get(i) + "s hit " + runs + " home runs");
        totalRuns += runs;
    }
    System.out.println("Total homeruns " + totalRuns);
ArrayList list=new ArrayList();
//填写清单
ArrayList团队成员=新建ArrayList();
对于(int i=0;i
前面的答案很有效。下面是一个简化代码和提高可读性的想法(尽管它也做了同样的事情!):

BaseBallTeam kate1=新的BaseBallTeam(“Kate”,2.0);
棒球队kate2=新棒球队(“Kate”,3.0);
棒球队mike1=新棒球队(“Mike”,1.0);
棒球队mike2=新棒球队(“Mike”,5.0);
List List=Arrays.asList(kate1、kate2、mike1、mike2);
ArrayList团队成员=新建ArrayList();
对于(棒球队:列表){
如果(!teamMembers.contains(team.getTeamMember())){
添加(team.getTeamMember());
}
}
双总运行=0;
对于(字符串团队成员:团队成员){
双程=0;
对于(棒球队:列表){
if(team.getTeamMember().equals(teamMember)){
跑步次数+=团队。getHomeRuns();
}
}
System.out.println(“团队成员+命中次数+跑步次数+本垒打次数的数量”);
总运行次数+=运行次数;
}
System.out.println(“全垒打总数”+全垒打总数);

回答问题的最佳方法是使用java 8功能。您可以按名称对所有BaseBallTeam对象进行分组,并使用java.util.stream.Collectors中的收集器将每个玩家的本垒打总数相加:

示例代码:

    BaseBallTeam kate1 = new BaseBallTeam("Kate", 2);
    BaseBallTeam kate2 = new BaseBallTeam("Kate", 2);
    BaseBallTeam mike1 = new BaseBallTeam("Mike", 4);
    BaseBallTeam mike2 = new BaseBallTeam("Mike", 2);

    List<BaseBallTeam> list = Arrays.asList(kate1, kate2, mike1, mike2);
    Map<String, Integer> map = list.stream()
            .collect(Collectors.toMap(t -> t.getTeamMember(), 
                                      k -> k.getHomeRuns(), 
                                      (t1, t2) -> t1 + t2)
                    );
    System.out.println(map);
产出:

麦克风数量达到6支本垒打

凯特打出4支本垒打的数量


你有什么问题?你的代码似乎做了你说你不知道怎么做的事情。显示你的
ArrayList
。我需要数据,比如存储在ArrayList中的字符串和双精度。它的所有批处理代码,即BaseBallTeam(Kate,2)BaseBallTeam(Kate,2)BaseBallTeam(Mike,4)BaseBallTeam(Mike,2)棒球队(Kate,2)棒球队(Kate,2)棒球队(Kate,2)棒球队(Mike,4)棒球队(Mike,2)你的预期输出是什么?Mike打6支本垒打的数量Kate打4支本垒打的数量?出于某种原因,我得到了;Kate打4支本垒打的数量是2支你在列表中的输入是什么?我有两支Kate,它们之间都有2支:(串凯特,双2)和(串凯特,双2)。当我打印代码时,会发生以下情况:Kates打了4个本垒打下一行Kates打了4个本垒打。我只希望Kate显示一次。您的两个Kate必须书写相同。没有空格,没有不同的大写或小写字母。Kate和Kate是不同的。因为我看不到您如何设置输入,所以我不能在这里说更多。代码打印出same字符串两次而不是一次。当所有的名字拼写相同时,这不应该发生。我将编辑我的答案并填写
填写列表部分。我得到以下输出:
凯特命中5.0支全垒打的数量麦克风命中6.0支全垒打总数11.0
    BaseBallTeam kate1 = new BaseBallTeam("Kate", 2);
    BaseBallTeam kate2 = new BaseBallTeam("Kate", 2);
    BaseBallTeam mike1 = new BaseBallTeam("Mike", 4);
    BaseBallTeam mike2 = new BaseBallTeam("Mike", 2);

    List<BaseBallTeam> list = Arrays.asList(kate1, kate2, mike1, mike2);
    Map<String, Integer> map = list.stream()
            .collect(Collectors.toMap(t -> t.getTeamMember(), 
                                      k -> k.getHomeRuns(), 
                                      (t1, t2) -> t1 + t2)
                    );
    System.out.println(map);
map.entrySet().forEach(e -> 
               System.out.println("Amount of " + e.getKey() + "s hit " + e.getValue() + " home runs"));