使用Java流将对象映射到多个对象

使用Java流将对象映射到多个对象,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我有一个关于Java流的问题。假设我有一个对象流,我想将每个对象映射到多个对象。比如说 IntStream.range(0, 10).map(x -> (x, x*x, -x)) //... 这里我想把每个值映射到同一个值,它的平方和带相反符号的同一个值。我找不到任何流操作来执行此操作。我想知道是否最好将每个对象x映射到具有这些字段的自定义对象,或者将每个值收集到中间map(或任何数据结构)中 我认为在内存方面,创建自定义对象可能更好,但可能我错了 在设计正确性和代码清晰性方面,哪种解决

我有一个关于Java流的问题。假设我有一个对象流,我想将每个对象映射到多个对象。比如说

IntStream.range(0, 10).map(x -> (x, x*x, -x)) //...
这里我想把每个值映射到同一个值,它的平方和带相反符号的同一个值。我找不到任何流操作来执行此操作。我想知道是否最好将每个对象
x
映射到具有这些字段的自定义对象,或者将每个值收集到中间
map
(或任何数据结构)中

我认为在内存方面,创建自定义对象可能更好,但可能我错了


在设计正确性和代码清晰性方面,哪种解决方案更好?或者,除了使用自定义类之外,我不知道还有更优雅的解决方案,例如:

class Triple{
private Integer value;
public Triple(Integer value){
 this.value = value;
}

public Integer getValue(){return this.value;}
public Integer getSquare(){return this.value*this.value;}
public Integer getOpposite(){return this.value*-1;}
public String toString() {return getValue()+", "+this.getSquare()+", "+this.getOpposite();}
}

IntStream.range(0, 10)
         .mapToObj(x -> new Triple(x))
         .forEach(System.out::println);
您可以在mmutabletriple中使用apachecommons来实现这一点。 例如:

 IntStream.range(0, 10)
.mapToObj(x -> ImmutableTriple.of(x,x*x,x*-1))
.forEach(System.out::println);
maven回购:


文档:

您可以使用
flatMap
生成一个
IntStream
,其中包含原始
IntStream
的每个元素的3个元素:

System.out.println(Arrays.toString(IntStream.range(0, 10)
                                            .flatMap(x -> IntStream.of(x, x*x, -x))
                                            .toArray()));
输出:

[0, 0, 0, 1, 1, -1, 2, 4, -2, 3, 9, -3, 4, 16, -4, 5, 25, -5, 6, 36, -6, 7, 49, -7, 8, 64, -8, 9, 81, -9]

尝试
IntStream.range(0,10).mapToObj(x->newint[]{x,x*x,-x})
。但是对象与任何类型的对象都是相同的吗?@JoseDaSilva在我的情况下不是这样,但是从我的答案来看,无论如何都没有直接的方法哦,哇!用于
ImmutableTriple
的整个库。。。当java=9中存在
array.asList
IntStream.of
List.of
时,etc@eugene我之前提到过,我们也可以使用自定义类。无论如何,我添加了一个自定义类作为参考。建议的答案是使用外部库。1+