Java 如何过滤具有自身映射引用的流?
下面的代码(简化为一个最小的、希望是自解释的示例)感觉很奇怪。我怀疑有比在Java 如何过滤具有自身映射引用的流?,java,java-stream,Java,Java Stream,下面的代码(简化为一个最小的、希望是自解释的示例)感觉很奇怪。我怀疑有比在状态上运行两次完整迭代更好的方法来检查属性。有人能给我一个提示吗 public AbstractState getInitialState() { List<AbstractState> sourceStates = states .stream() .map(AbstractState::getTransitions)
状态上运行两次完整迭代更好的方法来检查属性。有人能给我一个提示吗
public AbstractState getInitialState() {
List<AbstractState> sourceStates = states
.stream()
.map(AbstractState::getTransitions)
.flatMap(Collection::stream)
.map(AbstractStateTransition::getFrom)
.collect(Collectors.toList());
return states
.stream()
.filter(state -> !sourceStates.contains(state))
.findFirst()
.orElseThrow(NoInitialStateException::new);
}
public AbstractState getInitialState(){
列表sourceStates=状态
.stream()
.map(AbstractState::getTransitions)
.flatMap(集合::流)
.map(AbstractStateTransformation::getFrom)
.collect(Collectors.toList());
返回状态
.stream()
.filter(状态->!sourceStates.contains(状态))
.findFirst()
.orelsetrow(NoInitialStateException::new);
}
如果需要查找初始状态,是否意味着该状态的所有转换都将从状态设置为null
假设:循环也需要忽略(如果适用,从
和到
的转换等于当前状态时)
如果是,可以简化整个方法:
public AbstractState findinInitialState(){
返回状态
.stream()
.filter(state->state.getTransitions().stream())
.filter(转换->//删除状态转换为自身的可能循环
!(state.equals(transition.getFrom())
&&state.equals(transition.getTo())
)
.allMatch(transition->transition.getFrom()==null))
.findFirst()
.orelsetrow(NoInitialStateException::new);
}
该代码是否真正实现了您希望它实现的目标?要确定初始状态吗?这通常不是根据转换准确声明而不是确定的吗?是的,正确的方法名称应该是findininitialstate()
。是的,如果这是我的决定的话,到那时它的身份应该已经知道了。我必须处理混乱的局面:-(