Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java 8 JSON优化

Java 8 JSON优化
EN

Stack Overflow用户
提问于 2022-10-10 21:35:33
回答 2查看 63关注 0票数 -2

我有一个JSON的学生列表如下-对于每个学生,我想打印爱好,如果没有业余爱好显示NA使用Java 8。我已经写了下面的代码正在工作,但我必须使用2张地图。请建议是否可以优化此代码。

JSON

代码语言:javascript
运行
AI代码解释
复制
{
    "students":[
        {
            "fullName":"AAAAA",
            "standard":10,
            "hobbies":[
                "programming",
                "reading"
            ]
        },
        {
        }
    ]
}

JAVA 8

代码语言:javascript
运行
AI代码解释
复制
Map<String, List<Student>> studentMap = reportCard.getStudents().stream().collect(Collectors.groupingBy(Student::getFullName));
Map<String, String> studentMap2 = new TreeMap<>();
studentMap.keySet().forEach(key -> Optional.ofNullable(studentMap.get(key).get(0).getHobbies())
                        .ifPresentOrElse(hobbies -> studentMap2.put(key, hobbies.stream().map(String::trim).collect(Collectors.joining(";"))), () -> studentMap2.put(key, "NA")));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-11 00:30:57

使用Java 8

您可以使用collectors.toMapjava 8获得所需的输出,如下面的代码所示:

这里,

  1. I使用了文本块(来自jdk15的特性)中的示例json,使json具有可读的格式。(您也可以使用简单的字符串格式),我使用了
  2. ,其中我们将密钥作为学生名称,并且我检查了兴趣爱好列表是否为空,并且不应该为空,然后执行连接学生所有业余爱好的下游操作,否则它将具有"NA“,而我使用了merger (a,b) -> a + "," + b,如果存在相同的名字,它将合并相同学生的爱好,TreeMap::new将按自然顺序对爱好进行排序。

代码:

代码语言:javascript
运行
AI代码解释
复制
public class Test {
    public static void main(String[] args) throws JsonProcessingException {
        String input = """
                {
                     "students": [
                         {
                             "fullName": "AAAAA",
                             "standard": 10,
                             "hobbies": [
                                         "programming",
                                         "reading"
                                        ]
                         },
                         {
                             "fullName": "BBBB",
                             "standard": 12,
                             "hobbies": [
                                         "music",
                                         "reading"
                                        ]
                         },
                         {
                             "fullName": "CCCC",
                             "standard": 12,
                             "hobbies": [
                                        ]
                         },
                         {
                 
                         }
                     ]
                 }
                 
                """;
        ObjectMapper mapper = new ObjectMapper();
        StudentData data = mapper.readValue(input,StudentData.class);
        

        Map<String,String> output =
            data.getStudentList().stream().filter(a -> a.getName()!=null)
                    .collect(Collectors.toMap(Student::getName,
                            x -> (x.getHobbies()!=null && !x.getHobbies().isEmpty() ? String.join(",",x.getHobbies()) : "NA")
    ,(a,b) -> a + "," + b,TreeMap::new));
        System.out.println(output);
    }
}

输出::

代码语言:javascript
运行
AI代码解释
复制
{AAAAA=programming,reading, BBBB=music,reading, CCCC=NA}
票数 1
EN

Stack Overflow用户

发布于 2022-10-11 08:30:05

我觉得你应该分头去收集数据,然后把它整理好。

代码语言:javascript
运行
AI代码解释
复制
public static void main(String... args) {
    Root root = new Root();
    Map<String, Set<String>> studentHobbies = getStudentHobbies(root);
    printStudentHobbies(studentHobbies);
}

private static Map<String, Set<String>> getStudentHobbies(Root root) {
    return Optional.ofNullable(root.getStudents()).orElse(List.of()).stream()
                   .collect(Collectors.toMap(Student::getFullName,
                                             student -> Optional.ofNullable(student.getHobbies())
                                                                .orElse(Set.of())));
}

private static void printStudentHobbies(Map<String, Set<String>> studentHobbies) {
    studentHobbies.forEach((fullName, hobbies) ->
                                   System.out.format("%s - %s\n",
                                                     fullName,
                                                     hobbies.isEmpty() ? "NA" : hobbies));
}

以防万一,我们有以下课程

代码语言:javascript
运行
AI代码解释
复制
private static class Root {

    private List<Student> students;

}

private static class Student {

    private String fullName;
    private int standard;
    private Set<String> hobbies;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74023395

复制
相关文章
java mediatype utf-8_Java MediaType.APPLICATION_JSON_UTF8屬性代碼示例
* Searches {@link org.springframework.web.bind.annotation.RequestMapping RequestMapping}
全栈程序员站长
2022/08/26
5350
巧用 Java 8 的 Stream 来优化代码
Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读
BUG弄潮儿
2023/09/14
2390
巧用 Java 8 的 Stream 来优化代码
Java遍历json_java处理json数据
今天需要遍历一下json,但是只查到了遍历一层json的文章,满足不了多层级的json遍历。所以自己写一下,用fastJson处理。
全栈程序员站长
2022/10/03
1.9K0
8-Json提取器
在「函数助手」中设置属性名称为jmeter.version后点击生成。可以看到结果与「属性显示」中一致
zx钟
2021/04/29
1K0
8-Json提取器
java json数组转json对象_json对象数组
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
10.3K0
java json数组转json对象_json对象数组
初级JAVA:JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。JSON 语法是 JavaScript 对象表示法语法的子集。数据在名称/值对中、数据由逗号分隔、花括号保存对象、方括号保存数组。
葆宁
2022/01/11
1.1K0
初级JAVA:JSON
Java基础——JSON
org.json 配置pom.xml <dependencies> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160810</version> </dependency> </dependencies> put JSONObject xiaoming = new J
羊羽shine
2019/05/28
5000
JSON Java 解析
要使程序可以运行必须引入JSON-lib包——org.json.jar包。综合来看,这个JAR包比较好用。
Yano_nankai
2018/10/08
2.7K0
java:关于json解析工具选型(JSON-java,json-lib,gson,fastjson)
没有最好的工具,只有最适合的. 最近的项目需要对java 对象和json之间的序列化和反序列化,更准确的说是java bean对象和json之间的转换,使用哪个工具进行转换,让我犹豫了不少时间。
10km
2018/01/03
1.9K0
java校验json格式_json格式校验
最近用到json格式数据传输信息,在C语言中使用cjson解析json字符串,若json格式不正确,会使整个进程直接挂掉。想到能否在解析前先进行格式校验,通过后再解析,查找资料,网上有现成源码,网址:http://www.json.org/JSON_checker/
全栈程序员站长
2022/11/18
3.5K0
java校验json格式_json格式校验
性能优化-Tomcat8优化
tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对tomcat的优化也变得非常重要了。
cwl_java
2020/02/13
1.4K0
java生成json格式数据 和 java遍历json格式数据
java 生成json 格式的数据,在需要加入一个创建json的jar包,这个网上有好多,我使用的是org.json的jar包。
全栈程序员站长
2022/07/19
2.9K0
Java JSON格式字符串转JSON数组与JSON
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/04
3.4K0
java json转list_json转javabean
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/05
1.6K0
Java数据解析---JSON
一、Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1、键值对类型 1 { 2 “name”:”Alice”, 3 “age”:19 4 } 2、数组类型(有序列表) 1 { 2 “students”: 3 [ 4 {“name”:”
听着music睡
2018/05/18
3K0
java格式json和js格式json互转
java格式json和js格式json互转
Java架构师必看
2021/08/03
6.3K0
Java中Json解析
首先准备一个JSON格式的字符串 * String JsonStr = "{object:{persons:" + "[{name:'呵呵',image:'http://10.0.159.132:8080/Web/s1.png'}," + "{name:'哈哈',image:'http://10.0.159.132:8080/Web/s1.png'}," + "{name:'嘿嘿',image:'http://10.0.159.132:8080/Web/s2.jpg'}]}}";
用户3030674
2018/09/14
2.2K0
Java 处理 Json 实例
本文介绍Java中如果处理Json。例如json编码与解码。以上节选自《Netkiller Java 手札》 第 5 章 Json 目录 5.1. Json 编码 5.2. Json 解码 5.1. Json 编码 package netkiller.json; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java
netkiller old
2018/03/05
1.3K0
java excel转json
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130771.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/01
9150
json转成java对象
avro生成的代码里,String是CharSequence,不能通过Gson反序列化,于是有了下面的代码,ParseArray里还不完善: 1 static <T> List<T> parseAr
JadePeng
2018/03/12
2.9K0

相似问题

优化java 8流操作

13

Java 8可选/功能代码优化

11

java 8流操作优化了吗?

10

容器上的JVM优化(Java 8)

11

Windows 8从json数组优化插入sqlite

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档