Java 8 流 - 沿流操作使用原始流对象

Bic*_*ick 2 java java-8 java-stream

我正在Stream对一组Integers运行操作。
然后我创建了一个Cell对象来进行一些操作并应用一个过滤器,
我想创建一个只有有效s的Integerto的映射。CellCell

沿着这条线的东西:

List<Integer> type = new ArrayList<>();

Map<Integer, Cell> map =
  list.stream()
    .map(x -> new Cell(x+1, x+2))        // Some kind of Manipulations
    .filter(cell->isNewCellValid(cell))  // filter some
    .collect(Collectors.toMap(....));
Run Code Online (Sandbox Code Playgroud)

是否可以沿流操作使用原始流对象?

Era*_*ran 5

Stream如果您的map操作创建了一些包含它的实例,您可以存储原始元素。

例如:

Map<Integer, Cell> map =
  list.stream()
      .map(x -> new SomeContainerClass(x,new Cell(x+1, x+2)))
      .filter(container->isNewCellValid(container.getCell()))
      .collect(Collectors.toMap(c->c.getIndex(),c->c.getCell()));
Run Code Online (Sandbox Code Playgroud)

您可以使用一些现有的类而不是创建自己的类SomeContainerClass,例如AbstractMap.SimpleEntry

Map<Integer, Cell> map =
  list.stream()
      .map(x -> new AbstractMap.SimpleEntry<Integer,Cell>(x,new Cell(x+1, x+2)))
      .filter(e->isNewCellValid(e.getValue()))
      .collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)