【问题标题】:How do I count and return only the objects in my ArrayList that are true?如何计算并仅返回 ArrayList 中为真的对象?
【发布时间】:2017-10-23 05:27:25
【问题描述】:

我想计算所有为真的对象并返回它(正如我在 countNational 中尝试做的那样。我用来将对象分配为真/假的方法在不同的类中并命名为 NationalMessage。我已经粘贴了它位于 main 方法的下方。

public class Ex6 
{
 public static int countNational (ArrayList<Message> messageList) 
 {

 int countTrue = 0; //will count those that are true

 for (int i = 0; i<= messageList.size(); i++)
 {
     if(messageList.get(i)==true) //GETTING ERROR SAYING CAN'T COMPARE BOOLEAN
     countTrue = countTrue + 1;
 }
 return countTrue;
 }
 public static void main(String[] args)
 { 
 ArrayList<Message> messageList = new ArrayList<Message>();
 messageList.add(new NationalMessage("UKJohn","UKMark","aa"));
 messageList.add(new NationalMessage("UKJohn","FRJean","aa"));
 messageList.add(new Message("Mike","John","aa"));
 System.out.println(countNational(messageList));
 }
}

****************************** 下面是来自一个名为 NATIONAL MESSAGE 的单独班级的方法********** *******************

public NationalMessage(String ssender, String rreceiver, String ccontent)
{
    super(ssender,rreceiver,ccontent);

    if (ssender.equals("UK") && rreceiver.equals("UK"))
    {
        isNational = true;
    }

    else 
    {
        isNational = false;
    }
}

【问题讨论】:

  • 您要检查isNational吗?换成if(messageList.get(i).isNational)怎么样?
  • 我们怎么知道Message是真的还是假的?
  • 您的代码有几个问题。 ssenderrreceiver(无论第一个字母的重复点是什么……)不应该等于 "UK",而是从它开始。
  • 我相信问题应该说How to return the count of true objects in an ArrayList
  • @dejvuth NationalMessage 方法在一个单独的类中,所以当尝试你建议的方法时,我一直收到一个错误,说找不到变量 isNational。我该如何解决这个问题?

标签: java arrays oop object arraylist


【解决方案1】:

在 java8 中使用流就像过滤列表一样简单

long xx = myList.stream().filter(t -> t.isNational).collect(Collectors.counting());

或获取列表

List<NationalMessage> x = myList.stream().filter(t->t.isNational).collect(Collectors.toList());

【讨论】:

  • 你不是说long count = ...count();吗?
  • 用于计数:myList.stream().filter(t-&gt;t.isNational).count()myList.stream().filter(t-&gt;t.isNational).collect(Collectors.counting())
  • @StefanWarminski 作为标题也要求退货,现在是正确的。从列表中获取计数比从计数中获取列表更容易;)
  • @AxelH 方法的名称是 countNational ;) 听起来不像 getNationals。但你是对的,这个想法应该很清楚。
【解决方案2】:

变化:

if(messageList.get(i)==true)

到:

if(messageList.get(i).isNational==true)

为什么?

因为您可以将苹果与苹果、橙子与橙子进行比较。 在 == 的右侧,存在 true。所以在左侧也应该有一个布尔值或导致布尔值的表达式。 您的原始表达式 messageList.get(i) 不会产生布尔值。相反,它会导致一个对象或空值。 在某些语言(如 C)中,null 可能被解释为 false,而非 null 可能被解释为 true,但在 Java 中,情况并非如此。 您必须明确说明布尔值。 例如在您的情况下,左侧表达式可能是: messageList.get(i)!=null 这将评估为真/假

【讨论】:

  • "因为..." ;) 如果 OP 没有注意到这一点,可能需要解释一下。
  • 我收到一条错误消息,提示“找不到变量 isNational”。 isNational 属于不同的类别。那么我将如何访问 isNational 呢?
  • 您的课程 - Message 和 NationaMessage 是否都包含 isNational 或 NationaMessage 是否扩展了 Message?因为根据您的代码,您将它们都添加到列表中。
  • @Akshay 我有三门课。名为 Message 的超类(这不是我在上面分享的那个 - 我在上面分享的那个叫做 Ex6),一个叫做 NationalMessage 的 Message 的子类,以及 Ex6。我需要访问子类 NationalMessage 中的 isNational。如何访问子类中的变量?
猜你喜欢
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 2021-08-02
相关资源
最近更新 更多