如何获得购买量最大的商品-java

如何获得购买量最大的商品-java,java,Java,我有一个项目: String name; int amountPurchased; Date date; 我有一个项目列表,其中一些共享相同的名称,一些共享相同的名称和日期。我要做的是将具有相同名称和日期的项目的购买量相加 我希望能够在今天、昨天、本周和本月买到最多的商品 我尝试按日期相同的项目对其进行分组,然后按日期获取列表中购买最多的项目。只需在列表中循环,并为不同的项目创建一个新列表(检查名称)。之后,您将有两个包含相同项目的列表-您可以通过检查这些列表的Count()来选择购买最多的项

我有一个项目:

String name;
int amountPurchased;
Date date;
我有一个项目列表,其中一些共享相同的名称,一些共享相同的名称和日期。我要做的是将具有相同
名称和
日期的
项目的
购买量
相加

我希望能够在今天、昨天、本周和本月买到最多的商品


我尝试按日期相同的项目对其进行分组,然后按日期获取列表中购买最多的项目。

只需在列表中循环,并为不同的项目创建一个新列表(检查名称)。之后,您将有两个包含相同项目的列表-您可以通过检查这些列表的Count()来选择购买最多的项目。 接下来,你可以按天、月或年列出不同的清单,并计算在特定日期购买的物品,从而得出预期的结果


如果在数据库中完成这项工作,会容易得多-一个查询将为您提供所有答案

因为Java 8,您可以使用流来完成这项工作:

导入静态java.util.Comparator.comparingInt;
导入静态java.util.stream.Collectors.collectingAndThen;
导入静态java.util.stream.Collectors.groupingBy;
//列表项=。。。
Map mostPurchaseEditemsperday=items.stream()
.collect(分组依据)(项::getDate,
收集然后(
groupingBy(项::getName),
itemsPerName->itemsPerName.values().stream()
.max(比较(ItemsOfsSameName->ItemsOfsSameName.stream()
.mapToInt(项目::getAmountPurchased)
.sum())
.OrelGet(集合::emptyList)
)));
它的作用是

  • 它会根据日期对您的项目列表进行分组
    (它不允许null,我假设所有日期都表示“一天的开始”)
  • 每一个这样的日期
    • 它按名称对项目进行分组
    • 然后查找
      amountPurchased
      之和最大的名称
      .
      max
      将返回一个
      可选的
      ,您需要使用
      .get()

      有时编译器会发出警告,因为它不知道在这种情况下,可选项永远不会为空。为了避免这种情况,您可以使用
      .orElseGet(Collections::emptyList)

编辑: 如果需要整组日期(例如,“上周”、“上月”),则应使用将项目映射到相应日期组的函数替换
Item::getDate