小编Cla*_* M.的帖子

使用Java 8中的供应商填充具有通用列表的数组会抛出类型擦除的ClassCastEx b/c

我想使用Supplier和Stream.generate将带有通用列表的数组填充为元素.

看起来像这样:

    Supplier<List<Object>> supplier = () -> new ArrayList<Object>();
    List<Object>[] test = (List<Object>[]) Stream.generate(supplier).limit(m).toArray();
Run Code Online (Sandbox Code Playgroud)

错误输出为:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.util.List;
Run Code Online (Sandbox Code Playgroud)

现在,如何使用Java 8提供的技术填充具有泛型类型的数组?或者这是不可能的(还),我必须以"经典"的方式做到这一点?

此致,Claas M.

编辑

根据@ Water的要求,我使用stream.collect(使用Cast测试数组)和传统的迭代方法对填充数组/列表进行了一些性能测试.

首先使用列表进行性能测试:

private static int m = 100000;

/**
 * Tests which way is faster for LISTS.
 * Results:
 * 1k Elements: about the same time (~5ms)
 * 10k Elements: about the same time (~8ms)
 * 100k Elements: new way about 1.5x as fast (~18ms vs ~27ms)
 * …
Run Code Online (Sandbox Code Playgroud)

java arrays generics lambda

7
推荐指数
1
解决办法
4642
查看次数

如何使用流和Java 8将列表中的对象按属性分组到其他列表?

我想将包含time属性的对象列表分组为5分钟,最好使用流和收集器.

我在StackOverflow上找到的唯一可能的解决方案是计算我需要多少个间隔(子列表),将每个对象添加到这些列表中的每一个,并过滤掉那些不适合相应时间范围的对象,这不是一个很好的解决方案.

(您可以在此处找到Thread:如何在Java 8中按另一个元素的元素对List的元素进行分组)

我想到了类似的东西:

List<MyObject> list = new ArrayList<MyObject>();
.......
List<List<MyObject>> grouped = list.stream().collect(Collectors.groupingBy(obj -> obj.getTime() / intervalLength));
Run Code Online (Sandbox Code Playgroud)

这当然是最重要的工作.

我希望随着Java 8及其功能的使用越来越多,我们可以为这样的问题找到一个suting解决方案.

此致,Claas M.

编辑:最后,我使用了@Harsh Poddar的解决方案并将Map转换为列表列表使用

for(Map.Entry<Integer, List<MyObject>> entry:map.entrySet())
  list.add(entry.getValue());
Run Code Online (Sandbox Code Playgroud)

注意:之后必须对List进行排序.

lambda list java-8 java-stream

5
推荐指数
1
解决办法
4814
查看次数

如何在Angular.js的ng-class中使用包含破折号的类?

在我的Web应用程序中,我用它ng-class="{highlighted_category: selected === category}"来突出显示一个条目.当我想使用时出现问题,例如pure-menu-selected因为它包含Angular由于某种原因不允许的破折号.

Error: [$parse:syntax] Syntax Error: Token '-' is unexpected, expecting [:] at column 6 of the expression [{pure-menu-selected: selected === category}] starting at [-menu-selected: selected === category}].

解决这个问题的优雅方法是什么?为什么Angular不允许在ngClass中使用破折号?

javascript css angularjs

3
推荐指数
1
解决办法
839
查看次数

标签 统计

lambda ×2

angularjs ×1

arrays ×1

css ×1

generics ×1

java ×1

java-8 ×1

java-stream ×1

javascript ×1

list ×1