gpt4 book ai didi

java - 如何根据列表中的两个不同值获取 2 个计数并检查两个计数是否相等?

转载 作者:行者123 更新时间:2023-12-02 13:36:52 24 4
gpt4 key购买 nike

我有一个“列出问题”列表,该列表将包含所有项目的所有问题。

从这个“问题”对象中,我可以在循环内获取 issues.Project、Issues.Status。

我想做下面提到的操作。

List<Issue> issues = issueCollector.get().getAppropriateIssues();
for (int i=0;i< issues.size();i++)
{
Issue iss = issues.get(i);
}

例如:

**Project    IssueKey     Status**

PRJ 1 issKey 1 Closed
PRJ 1 issKey 2 Resolved
PRJ 2 isskey 1 Open
PRJ 3 issKey 1 Closed
PRJ 3 issKey 2 Resolved
PRJ 3 issKey 3 Closed
  1. 我想获取与项目相关的问题计数并将其存储在变量中。如何获取如下值并将其存储在可用的集合中?

    例如:项目|计数(问题)

        PRJ 1        2
    PRJ 2 1
    PRJ 3 3
  2. 获取项目中状态为“已关闭”或“已解决”的问题计数,并将其存储在变量中。如何获取如下值并将其存储在可用的集合中?

    例如:
    项目 |计数(已关闭或已解决的问题数)

        PRJ 1         2
    PRJ 3 3

然后从这两个变量中,我想检查条件,例如

 if(PRJ1(2 issues) == PRJ1(2 issues(with status)))
{
Add this PROJECT to a LIST of STRING
List<STRING> val = new List();
val.add(PROJECT);
}

最佳答案

为了灵 active (您可能必须检查 Unresolved 问题或这个或那个的总和),我建议引入一个小类 IssueStatus 来保留所有项目问题计数。顺便说一句,Java 8 允许您在另一个类中构造它。

class IssueStatus {
int numOfClosed = 0;
int numOfResolved = 0;
int numOfOpen = 0;

// not sure if status is string or enum
addStatusCount(String status) {
// logic to inc the num
// eg if "closed", then use numOfClosed++
}

getNumOfClosed() { return numOfClosed; }
getNumOfResolved() { return numOfResolved; }
getNumOfOpen() { return numOfOpen; }
getTotalIssues() { return numOfClosed + numOfResolved + numOfOpen; }
}

您可以考虑为对象添加项目名称。但在这里,我使用了 map 将给定状态与项目关联起来。

Map<String, IssueStatus> issueStatusMap = new ...

要填充 map ,只需使用循环

for (int i=0;i< issues.size();i++) {
Issue iss = issues.get(i);
// check if given project is already in map -> if not, add IssueStatus instance
if (! issueStatusMap.contains(iss.Project)) {
issueStatusMap.put(iss.Project, new IssueStatus());
}
// add issue status cound
issueStatusMap.get(iss.Project).addStatusCount(iss.Status);
}

您可以使用 java 8 的 stream().forEach( ... ) 来填充 map 。现在,您可以轻松地从 map 中获取统计信息。

// now you only have to get the data simply

// 1) sum of issues
for(Map.Entry<String, IssueStatus> entry : issueStatusMap.entrySet()) {
s.o.p("project name: " + entry.getKey() + " has " + entry.getValue().getTotalIssues());
}
// or use the sum of the three getNum... methods

// 2) count only closed + resolved
for(Map.Entry<String, IssueStatus> entry : issueStatusMap.entrySet()) {
IssueStatus is = entry.getValue();
s.o.p("project name: " + entry.getKey() + " status count: closed + resolved = " + (is.getNumOfClosed() + is.getNumOfResolved()));
}

当然,您可以执行所有 java 8 的流和分组,但我不建议这样做,因为每次执行任务时都必须执行另一个循环。如果问题列表非常大,这可能是一项详尽的操作。

就像在这个例子中一样,如果您想使用Collectors.groupingBy获得计数总和以及“已关闭”和“已解决”问题的总和,那么您将经历该问题列表二次。我的解决方案需要一个循环,需要一些额外的堆空间来存储对象。并且在收集数据时,使用另一个小循环来遍历所有项目状态对象而不是所有问题。 (如果有 100 个项目有 5000 个问题,那么就大获全胜)

最后,回答你的最后一件事(我承认这件事我不太清楚)

if(PRJ1(2 issues) == PRJ1(2 issues(with status)))

这只是

IssueStatus status = issueStatusMap.get("<your projectName>");
if( status.getNum... == status.getNum... ) {
// do something
}

关于java - 如何根据列表中的两个不同值获取 2 个计数并检查两个计数是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42944833/

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