2025年07月12日/ 浏览 7
实现千字左右的动态分割:
java
Map<String, String> segmentedTexts = rawContents.stream()
.collect(Collectors.toMap(
ContentPiece::getTitle,
content -> {
String text = content.getFullText();
return text.length() > 1050 ?
text.substring(0, text.lastIndexOf("。", 1000)) + "..." :
text;
}
));
这里用lastIndexOf
保证在句号处截断,避免破句,比简单截取1000字符更人性化。
按关键词热度分组:
java
Map<String, List<ContentPiece>> groupedByKeyword = rawContents.stream()
.flatMap(content ->
content.getKeywords().stream()
.map(keyword -> new AbstractMap.SimpleEntry<>(keyword, content))
)
.collect(Collectors.groupingBy(
Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue, Collectors.toList())
));
对于大型数据集可考虑并行:
java
List<String> parallelDescriptions = rawContents.parallelStream()
.map(ContentPiece::getDescription)
.filter(desc -> desc.length() < 200)
.collect(Collectors.toList());
但要注意线程安全和顺序问题,描述文本这类操作通常安全。
filter
可以减少后续操作量.map()
后插入.peek(System.out::println)
观察数据变化Optional
包装可能为null的字段访问这种处理方式不仅适用于内容管理,在电商订单分析、日志处理等领域同样有效。关键在于将数据视为流动的溪水,用各种”筛网”和”过滤器”自然地分离出我们需要的东西,而不是强行拆解。随着Java版本更新,Stream API仍在进化,比如Java 16引入的mapMulti
就提供了新的处理维度。