【问题标题】:Count occurrences in a Object ArrayList of a Attribute [closed]计算属性的对象 ArrayList 中的出现次数[关闭]
【发布时间】:2020-10-10 11:04:43
【问题描述】:

我如何计算String type 字段/属性在所述ArrayList<Item> 中等于武器的出现次数。我添加了三个格式错误的System.out.println()

package main;

import java.util.ArrayList;
import java.util.Collections;

class Main{
    
    public static void main(String[] args) {
        ArrayList<Item> gear;
        
        gear.add(new Item("weapon", 1, 1));
        gear.add(new Item("weapon", 1, 1));
        gear.add(new Item("helmet", 1, 1));
        gear.add(new Item("ring", 1, 1));
        gear.add(new Item("weapon", 1, 1));
        gear.add(new Item("ring", 1, 1));
        
        System.out.println(Collections.frequency(gear.getType(), "weapon"));
        System.out.println(Collections.frequency(gear.getType(), "helmet"));
        System.out.println(Collections.frequency(gear.getType(), "ring"));
    }
    
    class Item{
        String type;
        int weight;
        int strength;
        
        public Item(String type, int weight, int strength) {
            super();
            this.type = type;
            this.weight = weight;
            this.strength = strength;
        }

        public String getType() {
            return type;
        }
        
    }
}

想要的输出:

3
1
2

【问题讨论】:

  • 您想计算geartype 属性为weapon 的元素的数量。对吗?
  • 没错
  • 这个问题已经在 SO 上被多次询问和回答。请参阅how to get frequency of Object's field in ArrayListstackoverflow.com/questions/35070638/…。你试过谷歌搜索 java 属性频率列表 吗?
  • @Abra with what keywords did you find a duplicate just ask for the future 谢谢,是的,我做到了,但我只找到了有关 int 和字符串列表的示例
  • 你是对的,我经常缺少正确的关键字,遗憾的是我还没有学习流,但这是我的 OCP 考试即将到来的主题,我刚开始使用 Java 并且只使用脚本语言 3 个月前之前,如果我找不到正确的答案,我经常创建一个新答案,但现在它已被锁定,我无法删除它,而且我已经进行了额外的编辑,所以如果你可以将其标记为重复,那将是最受欢迎的跨度>

标签: java list count


【解决方案1】:

使用 lambdas 非常简单,

String gearType = "Weapon";
long fequency = gear.stream().filter(gearInput -> gearInput.getType().equalsIgnoreCase(gearType)).count();

您可以将其包装在一个函数中,将 gearType 作为参数传递。

【讨论】:

  • 认为你在 .getType() 之前少了一个“g”
【解决方案2】:
public class Item {
    String type;
    int weight;
    int strength;
    
    Item(String ty, int we, int st)
    {
        type = ty;
        weight = we;
        strength = st;
    }
    String getType()
    {
        return type;
    }
}

private int getFrequency(ArrayList<Item> list, String type)
{
    int counter = 0;
    for (Item object: list) {
        if (object.getType().equals(type))
            counter++;
    }
    return counter;
}

public static void main(String[] args)
{
   ArrayList<Item> gear = new ArrayList<Item>();
   gear.add( new Item("weapon",1,10) );
   gear.add( new Item("dog",2,23) );
   gear.add( new Item("none",4,44) );
   gear.add( new Item("car",1,88) );
   gear.add( new Item("weapon",65,20) );

   System.out.println("weapon elements: "+ this.getFrequency(gear,"weapon"));
   System.out.println("weapon elements: "+ this.getFrequency(gear,"helmet"));
   System.out.println("weapon elements: "+ this.getFrequency(gear,"ring"));
}
// Output: weapon elements: 2

【讨论】:

  • 我希望有一个 oneliner,也许是 lambda,但我非常感谢您的意见
猜你喜欢
  • 2021-07-06
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
相关资源
最近更新 更多