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

如何创建以属性为键、以最大值为值的贴图

公孙宏畅
2023-03-14

所以,在大学里,我们正在处理csv文件和流。现在我正在做一些家庭作业,但我已经被困在这个练习中好几天了。我有一个csv文件,其中包含一些关于事故的数据(如事故严重程度、受害者人数等),我有一个函数可以读取该数据并将其转换为事故对象列表(csv拥有的每种数据类型都有一个属性):

private Severity severity;
private Integer victims;

public Accident(Severity severity, Integer victims) {
this.severity = severity;
this.victims = victims;
}

我已经将该列表保存在一个对象中,我可以使用getAccident()调用列表:

private List<Accident> accidents;

public AccidentArchive(List<Accident> accidents) {
this.accidents = accidents;

public Map<Severity, Integer> getMaxVictimsPerSeverity() {  //Not working correctly
return getAccidents().stream.collect(Collectors.toMap(Accident::getSeverity, Accident::getVictims, Integer::max));


现在,我必须制作一个按照标题所说的函数。我认为地图键可以是严重性(这是一个枚举值,具有轻微、严重和致命的值),并且这些值可以是具有相同严重性的每起事故的最高受害者人数。例如,地图输出可以是:SLIGHT=1, SERIOUS=3, FATAL=5
我尝试过使用集合、收集器和比较器库,但我找不到任何方法来划分每个严重程度值中的所有事故,获取每个严重程度值的最大受害者人数,然后将两个值保存在Map中


共有2个答案

楚骞尧
2023-03-14

您正在尝试按严重性分组并计算每组中的事故数量。

Map<Severity, Long> counted = list.stream()
            .collect(Collectors.groupingBy(Accident::getSeverity, Collectors.counting()));

这应该可以帮助您实现您正在寻找的目标。

以下是一个工作示例:

import java.util.*;
import java.util.stream.*;

public class Test {
    
    public static void main(String args[]) {
      Accident a1 = new Accident(Severity.SLIGHT);
      Accident a2 = new Accident(Severity.SERIOUS);
      Accident a3 = new Accident(Severity.SLIGHT);
      Accident a4 = new Accident(Severity.FATAL);
      Accident a5 = new Accident(Severity.FATAL);
      
      List<Accident> list= new ArrayList<>();
      list.add(a1);
      list.add(a2);
      list.add(a3);
      list.add(a4);
      list.add(a5);
      
      Map<Severity, Long> counted = list.stream()
            .collect(Collectors.groupingBy(Accident::getSeverity, Collectors.counting()));

      System.out.println(counted);
    }
    
    static class Accident{
        Severity severtity;
        Accident(Severity s){
            this.severtity = s;
        }

        public Severity getSeverity(){
            return severtity;
        }
    }

    static enum Severity{
        SLIGHT, SERIOUS, FATAL;
    }
}

结果:<代码>{致命=2,轻微=2,严重=1}

白青青
2023-03-14

提供一个值抽取器以获取每次事故的受害者,并提供一个减速机以保持最大的受害者人数。

return getAccidents().stream()
    .collect(Collectors.toMap(Accident::getSeverity, Accident::getVictims, Integer::max));
 类似资料:
  • 我正在制作Spring云流Kafka流活页夹。在我的consumerbean方法中,我希望返回KStream,并将字符串列表作为值- 是否可以使用集合作为其值的KStream?如果是,有人能解释一下如何创建它吗?

  • 我向一个服务发出API请求,该服务在主体中返回一个JSON对象。 我似乎无法在groovy中获得名为“properties”的键的值。 每次我调用我得到以下内容 但是如果我只调用,就会得到预期的JSON对象 同样,如果I我得到这只是当我我是否得到上述响应

  • 我有一个JSON格式。 我希望将其转换为以下格式的对象:

  • 问题内容: 我很难相处。 基本上,我试图隐藏位于中的无序列表的溢出。 我不知道为什么这不起作用。 它没有隐藏它,而是将我的列表从水平布局拆分为垂直布局。 无序列表是轮播,容器是列表。 下面是我的CSS代码; 在这里,我的HTML; 问题答案: 好吧,如果有人遇到这个问题,这可能是您的答案: 如果要隐藏绝对定位的元素,请确保这些绝对定位的元素的容器是相对放置的。

  • 具有值的表 在存储过程中,我想从表中选择值,然后将其转换为var二进制最大值。我选择: 但是我得到一个错误: 不允许从数据类型varchar隐式转换为var二进制(max)。使用CONVERT函数运行此查询。 请帮我解决这个问题

  • 我有个问题。我在enter中得到了一个csv,其值如下: 该文件的名称类似于:AB01_TEST_ABDC_YYYYMMDd.csv 我需要把它们放到一张地图上,就像: Bar是csv中一行的bean,Foo是由Bar的一些元素创建的bean 现在,我成功地通过CSV的第一列值将列表拆分为一个映射。这给了: 我是这样做的: baz必须被csv的第一列和每个第一列值的行的itération拆分。因为