问题描述
我有class-Composite
:
public class CompositeText implements ComponentText {
private TypeComponent type;
private String value;
private final List<ComponentText> childComponents;
private CompositeText() {
childComponents = new ArrayList<>();
}
public CompositeText(String value,TypeComponent typeComponent) {
this.value = value;
this.type = typeComponent;
childComponents = new ArrayList<>();
}
@Override
public void add(ComponentText componentText) {
childComponents.add(componentText);
}
@Override
public void remove(ComponentText componentText) {
childComponents.remove(componentText);
}
@Override
public TypeComponent getComponentType() {
return this.type;
}
@Override
public ComponentText getChild(int index) {
return childComponents.get(index);
}
@Override
public int getCountChildElements() {
return childComponents.size();
}
@Override
public int getCountAllElements() {
return childComponents.stream()
.mapToInt(ComponentText::getCountAllElements)
.sum();
}
@Override
public String toString() {
return null;
}
}
我创建了执行相同操作的类-解析,将文本解析为段落,句子,标记,符号。
public class IntoParagraphParser implements ActionParser {
// call IntoSentenceParser
}
public class IntoSentenceParser implements ActionParser {
// call IntoLexemeParser
}
public class IntoLexemeParser implements ActionParser {
// call IntoSymbolParser
}
public class IntoSymbolParser implements ActionParser {
}
所有数据都存储在{-{1}}类的复合文件夹-List <ComponentText> childComponents
中。
如何正确创建一种方法,以便它打印复合材料内部的所有数据?
我认为这将是CompositeText
中的toString()
方法。
类CompositeText
的外观:
IntoParagraphParser
解决方法
在@Override
中需要toString()
方法CompositeText
像这样:
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
for (ComponentText component : childComponents) {
builder.append(component.toString());
}
return builder.toString();
}
但是如何使用Stream API
正确编写此代码?
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
childComponents.stream().map(...????
return builder.toString();
}