有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

来自IntStream的字节的java Java8流哈希集

我正试图用Java8StreamsAPI创建一个HashSet<Byte>bytes1, 2, 3, ... 9。我认为使用IntStream然后将值降级到byte就可以了

我在尝试不同的方法

HashSet<Byte> nums = IntStream.range(1, 10).collect(Collectors.toSet());

HashSet<Byte> nums = IntStream.range(1, 10).map(e -> ((byte) e)).collect(Collectors.toSet());

但这些都不管用

Error:(34, 73) java: method collect in interface java.util.stream.IntStream cannot be applied to given types;
  required: java.util.function.Supplier<R>,java.util.function.ObjIntConsumer<R>,java.util.function.BiConsumer<R,R>
  found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.Set<java.lang.Object>>
  reason: cannot infer type-variable(s) R
    (actual and formal argument lists differ in length)

我需要做flatMap还是mapToObject


共 (2) 个答案

  1. # 1 楼答案

    您可以将来自Eclipse CollectionsMutableByteSetIntStream一起使用,并避免装箱

    ByteSet byteSet = IntStream.range(1, 10)
            .collect(ByteSets.mutable::empty,
                    (set, i) -> set.add((byte) i),
                    MutableByteSet::addAll);
    

    注意:我是Eclipse集合的提交者

  2. # 2 楼答案

    您需要使用mapToObj,因为HashSet和所有泛型都需要对象

    Set<Byte> nums = IntStream.range(1, 10)
        .mapToObj(e -> (byte) e)
        .collect(Collectors.toSet());