番石榴 synchronizedSortedSetMultimap compareto nullpointerexception

问题描述

我使用 guava synchronizedSortedSetMultimap 来保存数据:

 public static final Multimap<Timestampeddeviceid,ParsedPayload> multimap = Multimaps.synchronizedSortedSetMultimap(
            TreeMultimap.create(new Comparator<Timestampeddeviceid>() {
                @Override
                public int compare(Timestampeddeviceid o1,Timestampeddeviceid o2) {
                    return o1.compareto(o2);
                }
            },new Comparator<ParsedPayload>() {

                @Override
                public int compare(ParsedPayload o1,ParsedPayload o2) {
                    return o1.getCurrentPkgNum()-o2.getCurrentPkgNum();
                }
            }));

map的key是timestamp和devID的组合:

@Data
@AllArgsConstructor
public class Timestampeddeviceid implements Comparable<Timestampeddeviceid> {
    String deviceid;
    TimeStamp timeStamp;


    @Override
    public int compareto(Timestampeddeviceid o) {
//        log.info("o:{},{}",o,timeStamp);
        if(!deviceid.equals(o.deviceid)){
            return deviceid.compareto(o.deviceid);
        }
        else {
            return timeStamp.compareto(o.getTimeStamp());
        }    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Timestampeddeviceid that = (Timestampeddeviceid) o;
        return Objects.equals(deviceid,that.deviceid) &&
                Objects.equals(timeStamp,that.timeStamp);
    }

    @Override
    public int hashCode() {
        return Objects.hash(deviceid,timeStamp);
    }
    
}

而且数据是按顺序来的,当第一个数据来的时候,我得到了异常:

2021-03-18 10:03:06.284 INFO  com.aier.camerawater.service.OnenetService - id:"668609823",total:28,current:1,time:{"day":18,"hour":10,"minute":3,"month":3,"second":4,"year":2021},exception:{}
java.lang.NullPointerException: null
        at com.aier.camerawater.model.TimeStamp.compareto(TimeStamp.java:39)
        at com.aier.camerawater.model.Timestampeddeviceid.compareto(Timestampeddeviceid.java:24)
        at com.aier.camerawater.util.Common$1.compare(Common.java:32)
        at com.aier.camerawater.util.Common$1.compare(Common.java:28)
        at java.util.TreeMap.getEntryUsingComparator(TreeMap.java:376)
        at java.util.TreeMap.getEntry(TreeMap.java:345)
        at java.util.TreeMap.get(TreeMap.java:278)
        at com.google.common.collect.AbstractMapBasedMultimap.put(AbstractMapBasedMultimap.java:184)
        at com.google.common.collect.AbstractSetMultimap.put(AbstractSetMultimap.java:137)
        at com.google.common.collect.TreeMultimap.put(TreeMultimap.java:74)
        at com.google.common.collect.Synchronized$SynchronizedMultimap.put(Synchronized.java:636)
        at com.aier.camerawater.service.OnenetService.parse(OnenetService.java:92)
        at com.aier.camerawater.controller.OnenetController.receive(OnenetController.java:28)
        at sun.reflect.GeneratedMethodAccessor40.invoke(UnkNown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)

为什么第一个数据导致 comoareto 方法 NPE 没有意义。 任何帮助将不胜感激

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...