如何将数据存储在对象的对象列表中?

2024-04-30

我有以下代码,将年龄相同且得分最高的用户分组。 我现在有而不是Map<Person, List<String>>一个名为 Person 的对象,在 person 类中有 MapMap<String,Double> nameScoreTogether;。我需要将输出及其信息(名称和相应的分数)存储在人员对象的地图中,那么我如何相应地更改代码?

输入: 数据类型为Map<Person, String>:

    {Person has at Age: 12 (Score: 50)
    =alex,
     Person has at Age: 16 (Score: 50)
    =miki, 
    Person has at Age: 5 (Score: 100)
    =shi, 
    Person has at Age: 4 (Score: 50)
    =rafi, 
    Person has at Age: 1 (Score: 50)
    =sharbel, 
    Person has at Age: 5 (Score: 0)
    =thomas, 
    Person has at Age: 14 (Score: 60)
    =thomy, 
    Person has at Age: 14 (Score: 50)
    =angelos,
     Person has at Age: 11 (Score: 50)
    =musti, 
    Person has at Age: 11 (Score: 100)
    =aloo,
     Person has at Age: 2 (Score: 50)
    =evi}  

预期输出是:

    Person(score=50.0, age=1) - [sharbel=50.0]
    Person(score=100.0, age=11) - [aloo=100.0, musti=50.0]
    Person(score=50.0, age=12) - [Alex=50.0]
    Person(score=60.0, age=14) - [thomy=60.0, angelos=50.0]
    Person(score=50.0, age=2) - [evi=50.0]
    Person(score=100.0, age=5) - [shi=100.0, Thomas=5.0]
    Person(score=50.0, age=4) - [rafi=50]
    Person(score=50.0, age=16) - [miki=50]

尝试代码:但现在我有List<Person>其中有Map<String,Double>

    Map<Person, List<String>> result = origin.entrySet().stream()
        .collect(Collectors.groupingBy(e -> e.getKey().getAge())).entrySet().stream()
        .collect(Collectors.toMap(
            e -> e.getValue().stream()
                .map(Map.Entry::getKey)
                .max(Comparator.comparing(Person::getScore))
                .get(),
            e -> e.getValue().stream()
                .map(Map.Entry::getValue)
                .collect(Collectors.toList()))
        );

班级人物:

    public class Person {
        int Age;
        int lineScoreMax;
        Map<String, Double> nameScoreTogether;
    }

我已经改变了Person类为

public class Person {
    int age;
    double lineScoreMax;
    Map<String, Double> nameScoreTogether;

    Person(int age, double score) {
        this.age = age;
        this.lineScoreMax = score;
    }

    Person(int age, double score,  Map<String, Double> nameScoreTogether) {
        this.age = age;
        this.lineScoreMax = score;
        this.nameScoreTogether = nameScoreTogether;
    }

    public int getAge() {
        return age;
    }

    public double getLineScoreMax() {
        return lineScoreMax;
    }
}

我添加了一个新的三参数构造函数。

Map<Person, String> origin = new HashMap();
//Populate origin

Map<Integer, List<Map.Entry<Person, String>>> ageToListOfPersonNames = origin.entrySet()
            .stream()
            .collect(Collectors.groupingBy(entry -> entry.getKey().getAge()));

List<Person> persons = ageToListOfPersonNames.entrySet()
        .stream()
        .map(entry -> new Person(entry.getKey(),
                //Find the max score for an age
                entry.getValue()
                     .stream()
                     .map(Map.Entry::getKey)
                        .max(Comparator.comparingDouble(Person::getLineScoreMax))
                        .map(Person::getLineScoreMax)
                        .orElse(0D),

                //Find the map of name to score
                entry.getValue()
                        .stream()
                        .collect(Collectors.toMap(Map.Entry::getValue,
                                personNameEntry -> personNameEntry.getKey().getLineScoreMax()))
            ))
        .collect(Collectors.toList());

首先,我将输入映射到年龄映射到列表人、姓名条目。

接下来,我对其进行流式传输并计算最大分数以及人员姓名与个人分数的映射,并将它们作为参数传递给 Person 构造函数。最后,我将各个 Person 对象收集为一个列表。

注意:这假设人名是唯一的。


更新1:从你的评论来看,

[..] 如果我不去亲自上课怎么办?Map<String, Double>nameScoreTogether;像这样的对象列表:List<Information>nameScoreTogether 和 Information 包含一个名为String:name,属性称为double:age

Person 类更改为

public class Person {
    int age;
    double lineScoreMax;
    List<Information> nameScoreTogether;

    Person(int age, double score) {
        this.age = age;
        this.lineScoreMax = score;
    }

    Person(int age, double score,  List<Information> nameScoreTogether) {
        this.age = age;
        this.lineScoreMax = score;
        this.nameScoreTogether = nameScoreTogether;
    }
    //Getters
}

信息类:

private class Information {
    private String name;
    private double score;

   Information(String name, double score) {
        this.name = name;
        this.score = score;
    }
}

使用下面的块代替//Find the map of name to score在前面提供的代码中。

entry.getValue()
     .stream()
     .map(personNameEntry -> new Information(personNameEntry.getValue(),
                            personNameEntry.getKey().getLineScoreMax()))
     .collect(Collectors.toList())

更新2:

如果 Information 类只有一个参数构造函数和一个分数设置器,请更改map step as

.map(personNameEntry -> {
    Information information = new Information(personNameEntry.getValue());
    information.setScore(personNameEntry.getKey().getLineScoreMax());
    return information;
  })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将数据存储在对象的对象列表中? 的相关文章

随机推荐

  • 如何在 Visual Studio 2019 中创建 xamarin PCL 项目

    在 VS 2019 中创建新的 xamarin 项目时 我没有 PCL 项目的选项 我得到如图所示的选项 我运行旧的 PCL 项目 它运行成功 请帮我在 VS 2019 中创建 PCL 项目 可移植类库 PCL are 已弃用在最新版本的
  • 使用变量 Criteria VBA 自动筛选

    我试图使用变量在工作表上放置自动过滤器 但它不起作用 Dim Criteria As Object i 1 Set Criteria ActiveSheet Cells i 1 MsgBox Criteria Value this retu
  • AngularJS 和 Webpack 集成

    我正在寻找一些使用帮助webpack http webpack github io docs 对于大型 AngularJS 应用程序 我们使用基于功能的文件夹结构 每个功能 页面都有一个模块 并且它们有控制器 指令 我已经成功配置了 web
  • 如何使用 Jericho HTML 解析器获取特定标签之间的文本和其他标签?

    我有一个包含特定标签的 HTML 文件 例如 table cellspacing 0 结束标签是 table 现在我想获取这些标签之间的所有内容 我正在 Java 中使用 Jericho HTML 解析器来解析 HTML 是否可以获取 Je
  • 按名称调用作为对象成员的 javascript 函数

    我希望能够通过名称将对任意函数的引用传递给另一个 javascript 函数 如果只是一个全局函数 没有问题 function runFunction funcName window funcName 但假设该函数可以是任意对象的成员 例如
  • 汇编中如何计算负数

    我是汇编新手 我有一个关于如何表示负数的问题 我有三个 DWORDS 变量 比方说 result DWORD 0 i DWORD 3 j DWORD 5 我想计算这个公式 结果 i j 8 但是 当我执行 i j 时 由于符号 结果将是一个
  • 检查 Django 模板内的权限

    我可以在 Django 模板内使用 Auth 应用程序的权限检查吗 我想在模板末尾为特权用户显示一个简单的表单 更重要的是 我应该这样做还是这不是 Django 方式 如果您要检查模板中的权限 以下代码就足够了 if perms app l
  • GitHub:本地使用 wiki:首次推送到 GitHub wiki 时出错

    这个问题我搜索了很多次 还是无法解决 假设我从 user1 分叉了一个存储库 我们将其命名为 repo1 现在我也想分叉该存储库的 Wiki 部分 当您分叉存储库时 GitHub 不会为您做任何事情 https stackoverflow
  • 允许用户将自己的 JavaScript 添加到您的网站是否存在安全问题?

    我计划创建一个开源教育网络应用程序 人们可以在其中添加和编辑内容 有点像维基百科 不过 我希望添加另一个功能 允许用户使用 JavaScript 添加自己的交互式内容 类似于 JSFiddle 的做法 这样做有哪些安全问题 可选问题 如何克
  • 在包含一些通配符的大型列表中进行成员资格测试

    当列表包含特殊类别时 如何测试某个短语是否在大型 650k 短语列表中 例如 我想测试这个短语是否 he had the nerve 在列表中 确实如此 但是在 he had DETERMINER nerve where DETERMINE
  • Java 应用程序中 PKIX 路径构建失败

    将应用程序从 Windows 2000 迁移到 Windows 2008 R2 Server 后 我花了将近一周的时间才让我的应用程序正常运行 步骤 安装Java JDK 1 7 0 25 设置系统环境变量JAVA HOME to C Pr
  • SQL 按行计数模进行分组

    我有以下示例数据 Id Name Quantity 1 Red 1 2 Red 3 3 Blue 1 4 Red 1 5 Yellow 3 因此 对于此示例 总共有 5 个红色 1 个蓝色和 3 个黄色 我正在寻找一种按颜色对它们进行分组的
  • 在 Windows 7 中安装 Express.JS 的问题

    我已通过其网页上的安装程序安装了 Node js 并将其路径添加到我的环境变量中 以便我可以使用node and npm通过命令行 如果我制作一个快速应用程序 它可以工作 但我必须手动创建它 我想这很好 但我想知道为什么我不能使用expre
  • Java泛型方法不能调用另一个约束更宽松的泛型方法并返回其值

    我想这样做
  • 访问 ASP.NET 中 App_Code 中未声明的类

    我有时定义业务逻辑类来 帮助 我的 ASPX 代码隐藏类 对我来说 将它们都包含在代码隐藏文件中是最有意义的 因为它们一起工作 但是 我偶尔想从 App Code 中定义的更高级别的类访问业务逻辑类 但它们不能在文件外部自动访问 因此 问题
  • 开源 C# 套接字 (TCP + UDP) 库 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对 NET 框架的标准套接字类感到头疼 有人可以推荐一个高效的开源 C 套接字 TCP UDP 库来处理套接字消息吗 使用 Kerry Jia
  • 如何组合多个 TUI 表单来编写更复杂的应用程序?

    我想写一个程序T基于外部的User I界面 TUI https en wikipedia org wiki Text based user interface 由多种形式组成 第一种形式包含一个 列表 每个列表元素代表一个按钮 如果按下相应
  • 使用 Regex/C# 将 转换为

    奇怪的问题 但我不会浪费时间解释为什么我需要这样做 只是我需要这样做 我有以下内容
  • 使用列号计算列中数字的平均值

    我正在尝试找到一种使用列号来计算列中数字平均值的方法 例如 我知道 E 列中数字的平均值可以使用公式 AVERAGE E E 获得 但是如果我需要使用列号 在本例中为 5 来计算该平均值该怎么办 提前致谢 使用索引 AVERAGE INDE
  • 如何将数据存储在对象的对象列表中?

    我有以下代码 将年龄相同且得分最高的用户分组 我现在有而不是Map