当前位置: 首页 > 知识库问答 >
问题:

如何像在核心Java中一样进行分组和排序

姚韬
2023-03-14

编写一个按日期分组的程序

Reviews{
private String reviewId;
private String tags;
private String topics;
private String date;
}
List<Reviews> reviewsList= new ArrayList<>();
reviewsList=[
{
reviewId=1;
tags="[\"group1\",\"group2\"]";
topics="[\"air\",\"Speed\"]";
date="2021-01-01 05:32:44"
},
{
reviewId=2;
tags="[\"Group1\"]";
topics="[\"Air\",\"quality\"]";
date="2021-01-07 09:32:44"
},
{
reviewId=3;
tags="[\"Group3\"]";
topics="[\"air\",\"blades\"]";
date="2021-01-07 01:32:24"
}]

主题输出格式应为:[{“日期”:“2021-01-01”,“主题列表”:[{“主题名称”:“空气”,“主题计数”:3},{“主题名称”:“速度”,“主题计数”:1}],{},{}]

共有1个答案

景靖琪
2023-03-14
//intializing List    
List<Reviews> reviewsList= new ArrayList<>();
    
            reviewsList.add(new Reviews("1", "[\"group1\",\"group2\"]", "[\"air\",\"Speed\"]", "2021-01-01 05:32:44"));
            reviewsList.add(new Reviews("2", "[\"Group1\"]", "[\"Air\",\"quality\"]", "2021-01-07 09:32:44"));
            reviewsList.add(new Reviews("3", "[\"Group3\"]", "[\"air\",\"blades\"]", "2021-01-07 01:32:24"));
    
    //Converting date with seconds to date only ex: 2021-01-01 05:32:44 to 2021-01-01 as if time will be there every element will be unique
         List<Reviews> newList=   reviewsList.stream().map((x)->{
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                LocalDate dateTime = LocalDate.parse(x.getDate(), formatter);
                x.setDate(dateTime.toString());
                return x;
            }).collect(Collectors.toList());
    
            
    
    //Grouping by date
            Map<String, List<Reviews>> groupedReviewByDate = newList.stream()
                    .collect(groupingBy(Reviews::getDate));
    
            
            // converting string key to date format so sorting could be easy
            SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
            Map<Date, List<Reviews>> newMap = groupedReviewByDate.entrySet().stream()
                    .collect(Collectors.toMap(e -> {
                        try {
                            return dateFormat.parse(e.getKey());
                        } catch (ParseException ex) {
                            ex.printStackTrace();
                        }
                        return null;
                    }, Map.Entry::getValue));
    
           
    //Treemap will be sorted automatically on insertion
            Map<Date, List<Reviews>> m1 = new TreeMap(newMap);
            m1.forEach((k,v)->{
                System.out.println(k+"--- >"+v);
            });

课堂将是这样的

class  Reviews{
    private String reviewId;
    private String tags;
    private String topics;
    private String date;

    public Reviews(String reviewId, String tags, String topics, String date) {
        this.reviewId = reviewId;
        this.tags = tags;
        this.topics = topics;
        this.date = date;
    }

    public String getReviewId() {
        return reviewId;
    }

    public void setReviewId(String reviewId) {
        this.reviewId = reviewId;
    }

    public String getTags() {
        return tags;
    }

    public void setTags(String tags) {
        this.tags = tags;
    }

    public String getTopics() {
        return topics;
    }

    public void setTopics(String topics) {
        this.topics = topics;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return "Reviews{" +
                "reviewId='" + reviewId + '\'' +
                ", tags='" + tags + '\'' +
                ", topics='" + topics + '\'' +
                ", date='" + date + '\'' +
                '}';
    }
}
 类似资料:
  • 因此,我试图学习如何为类项目排序数组。我想知道如何对一个数组进行排序,从而对另一个数组进行排序。在下面的代码中,我可以对年份数组进行排序,但我如何才能使更改这一数组将名称和艺术家数组都更改为它们排列的数组呢?此外,如果你有任何建议,让代码对眼睛不那么苛刻,请告诉我,我正在努力掌握这个概念。

  • 我有一个JSON数组: 结果为“数据”: 我怎么能有一个升序按“datesurder”? THX

  • 我试图用和PHP一样的方式在Javascript中对浮点数进行舍入;但是我不能用同样的方式将两种语言的数字四舍五入:< code > 6.4049999999999 当我使用PHP循环时,我得到:,但当我尝试使用Javascript循环时,总是得到 信息: 正确答案是 https://stackoverflow.com/a/54721202/4359029 我的脚本尝试: 摘自:http://lo

  • 问题内容: 我的数组不包含任何字符串。但是它包含对象引用。每个对象引用都通过toString方法返回名称,id,作者和发布者。 现在,我需要按名称对对象数组进行排序。我知道如何排序,但是我不知道如何从对象中提取名称并对它们进行排序。 问题答案: 你有两种方法可以使用Arrays实用程序类 实现一个Comparator并将数组与比较器一起传递给sort方法,该方法将其作为第二个参数。 在对象所属的类

  • 问题内容: 该问题旨在作为有关PHP中数组排序问题的参考。容易想到您的特定案例是独特的,值得提出新的问题,但是实际上大多数都是此页面上一种解决方案的细微变化。 如果您的问题作为该问题的重复而被关闭,请仅在您可以解释为什么该问题与以下所有内容明显不同时才要求重新提出您的问题。 如何在PHP中对数组排序? 如何在PHP中对 复杂 数组进行排序? 如何在PHP中对对象数组进行排序? 有关使用PHP现有功