ArrayIndexOutOfBounds,同时使用Java 8流来迭代列表

时间:2017-05-23 20:26:31

标签: java-8

我有一个名为md的对象列表。每个对象都有一个activityName,一个startTime和一个endTime(用于活动)。 我想迭代这个列表,并为每个活动,获取startTime和endTime。

Map<String,Long> m1 = new HashMap<String,Long>();
        m1 = md
                .stream()
                .map(s->s.activityName)
                .collect(HashMap<String,Long>::new,
                    (map,string)->{
                        String d1 = md.get(md.indexOf(string)).startTime;
                        String d2 = md.get(md.indexOf(string)).endTime;
                           .
                           .
                           .
                 },HashMap<String,Long>::putAll);

当我尝试获取字符串String d1 = md.get(md.indexOf(string)).startTime;

的索引时,它给了我java.lang.ArrayIndexOutOfBoundsException:-1

有没有其他方法可以使用Lambda表达式简化代码?

如果我有两个同名活动(以前喝酒)会怎么样?它只会返回它找到的第一个饮酒活动的索引吗?

1 个答案:

答案 0 :(得分:1)

你似乎错过了这样一个事实:

$User1

您的信息流已成为md.stream().map(s -> s.activityName) ;而你的md仍然是Stream<String>

在地图操作中,您试图在List<YourObject>内找到String,这显然不存在,因此md

因此,您需要-1 <{1}}

Map<String, Long>

现在解析取决于您使用的日期。