热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
本提示词专为Java开发场景设计,能够根据具体业务需求生成高质量的Java流操作代码。通过分析用户提供的场景描述,自动识别数据处理需求,生成符合Java开发规范的流式操作代码,包含完整的类型推断、方法链式调用和异常处理机制。特别适用于集合数据处理、数据转换、筛选过滤等常见开发场景,帮助开发者快速实现函数式编程解决方案。
场景分析
代码实现
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* 评论清洗与排序工具。
* 特点:
* - 线程安全(正则 Pattern 为不可变单例)
* - JDK 8+ 兼容(不使用 String#isBlank / Stream#toList 等 11/16+ API)
*/
public final class CommentCleaner {
private CommentCleaner() {}
// 简化的 URL 模式:匹配 http(s):// 或 www. 开头直到下一个空白
// 说明:\S+ 可以覆盖绝大多数 URL 形式(含短链 / 查询串 / 哈希等)
private static final Pattern URL_PATTERN =
Pattern.compile("(?i)\\b(?:https?://|www\\.)\\S+");
// 合并多余空白(包括制表符和换行)为单个空格
private static final Pattern WHITESPACE_PATTERN =
Pattern.compile("\\s+");
// 长度边界(按码点数计算)
private static final int MIN_LEN = 5;
private static final int MAX_LEN = 120;
/**
* 对评论列表进行清洗、去重与排序。
* @param rawComments 原始评论列表(可为 null,允许包含 null 元素)
* @return 清洗后的评论列表(不可为 null)
*/
public static List<String> cleanComments(List<String> rawComments) {
if (rawComments == null || rawComments.isEmpty()) {
return Collections.emptyList();
}
return rawComments.stream()
.filter(Objects::nonNull) // 兜底:跳过 null 元素
.map(CommentCleaner::normalize) // 去空白、去 URL、去表情、合并空白、小写
.filter(s -> !s.isEmpty()) // 清洗后仍需非空
.filter(CommentCleaner::withinLength) // 长度在 [5, 120](码点)
.distinct() // 去重(已小写统一)
.sorted(Comparator
.comparingInt(CommentCleaner::codePointLength) // 长度升序
.thenComparing(Comparator.naturalOrder()) // 再按字典序
)
.collect(Collectors.toList());
}
// 单条文本的清洗逻辑(可复用/单测)
static String normalize(String text) {
String s = text.trim();
if (s.isEmpty()) return s;
// 1) 去 URL
s = URL_PATTERN.matcher(s).replaceAll(" ");
// 2) 去 Emoji(包括 ZWJ/变体选择符)
s = removeEmojis(s);
// 3) 合并多余空白并去首尾空白
s = WHITESPACE_PATTERN.matcher(s).replaceAll(" ").trim();
// 4) 小写统一(使用 ROOT 保证可重现性)
s = s.toLowerCase(Locale.ROOT);
return s;
}
// 过滤掉 Emoji 相关码点(按 UnicodeBlock + 特殊连接符/变体选择符)
static String removeEmojis(String input) {
if (input.isEmpty()) return input;
StringBuilder sb = new StringBuilder(input.length());
input.codePoints().forEach(cp -> {
if (!isEmojiCodePoint(cp)) {
sb.appendCodePoint(cp);
}
});
return sb.toString();
}
// 按 Unicode 块与特殊码点判断是否为 Emoji 相关
private static boolean isEmojiCodePoint(int cp) {
// Zero Width Joiner(用于组合 emoji)
if (cp == 0x200D) return true;
// 变体选择符(常用于 emoji 彩色变体)
if (cp == 0xFE0F) return true;
Character.UnicodeBlock block = Character.UnicodeBlock.of(cp);
if (block == null) return false;
// 按名称判断,避免直接引用潜在的高版本常量,提升 JDK 兼容性
String name = block.toString();
switch (name) {
case "EMOTICONS":
case "MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS":
case "TRANSPORT_AND_MAP_SYMBOLS":
case "SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS":
case "SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A": // 高版本可能存在
case "SYMBOLS_FOR_LEGACY_COMPUTING": // 高版本可能存在
case "DINGBATS":
case "VARIATION_SELECTORS":
case "VARIATION_SELECTORS_SUPPLEMENT": // 高版本可能存在
return true;
default:
return false;
}
}
// 码点长度(支持多语言,避免 surrogate 误差)
static int codePointLength(String s) {
return s.codePointCount(0, s.length());
}
// 长度判定(包含边界)
static boolean withinLength(String s) {
int len = codePointLength(s);
return len >= MIN_LEN && len <= MAX_LEN;
}
// 便捷示例(可删除)
public static void main(String[] args) {
List<String> raw = new ArrayList<>();
raw.add(" 超级好用!!! ");
raw.add("快来看👉 https://example.com/deal?id=123#top ");
raw.add("性价比高😄,还会再买");
raw.add("性价比高😄,还会再买"); // 重复
raw.add("WWW.Test.COM/a/b ");
raw.add("短");
raw.add("THIS is GREAT!!!");
raw.add("This is great!!! "); // 与上方大小写不同,清洗后会合并
raw.add(" ");
raw.add("🚗🚕🚙 车子不错");
raw.add("五星好评!!!👍👍");
List<String> clean = CommentCleaner.cleanComments(raw);
clean.forEach(System.out::println);
}
}
代码说明
使用示例 输入:
清洗输出(示例,按长度与字典序排序后):
注:实际输出以具体字符与码点长度计算为准(示例中的标点可能影响长度与排序)。
注意事项
如需把长度边界、是否去除特定符号等做成可配置项,可将 MIN_LEN、MAX_LEN 与表情识别策略注入为参数或配置。
场景分析
代码实现
import java.util.*;
import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class KeywordCounter {
// 使用Unicode类别分词:非“字母或数字”的字符作为分隔符
private static final Pattern NON_ALNUM_SPLITTER = Pattern.compile("[^\\p{L}\\p{N}]+");
private static final int DEFAULT_TOP_N = 10;
/**
* 统计出现频次最高的关键词(Top N)。
*
* @param titles 文章标题列表,允许为null或空
* @param stopWords 停用词集合,允许为null或空(将按小写匹配)
* @param topN 需要返回的Top N,若<=0则使用默认值10
* @return 按频次降序、词典序升序稳定排序的LinkedHashMap<String, Long>
*/
public static LinkedHashMap<String, Long> topFrequentKeywords(
List<String> titles,
Set<String> stopWords,
int topN
) {
// 兜底:输入为空时直接返回空的LinkedHashMap
if (titles == null || titles.isEmpty()) {
return new LinkedHashMap<>();
}
// 兜底:停用词为null或空时,按空集合处理;并统一为小写以便匹配
final Set<String> normalizedStopWords = (stopWords == null || stopWords.isEmpty())
? Collections.emptySet()
: stopWords.stream()
.filter(Objects::nonNull)
.map(s -> s.toLowerCase(Locale.ROOT))
.collect(Collectors.toUnmodifiableSet());
final int limit = topN > 0 ? topN : DEFAULT_TOP_N;
// 1) 扁平化分词(flatMap)
// 2) 统一小写
// 3) 过滤空串、长度<2、停用词
// 4) 分组计数(groupingBy + counting)
Map<String, Long> frequency = titles.stream()
.filter(Objects::nonNull)
.flatMap(title -> Arrays.stream(NON_ALNUM_SPLITTER.split(title)))
.map(token -> token.toLowerCase(Locale.ROOT))
.filter(token -> !token.isBlank())
.filter(token -> token.length() >= 2)
.filter(token -> !normalizedStopWords.contains(token))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
if (frequency.isEmpty()) {
return new LinkedHashMap<>();
}
// 自定义比较器:先按频次降序,再按词典序升序,保证确定性与可读性
Comparator<Map.Entry<String, Long>> byCountDescThenWordAsc =
Comparator.<Map.Entry<String, Long>, Long>comparing(Map.Entry::getValue)
.reversed()
.thenComparing(Map.Entry::getKey);
// 排序 + 截取TopN + 收集为按插入顺序保持的LinkedHashMap
return frequency.entrySet().stream()
.sorted(byCountDescThenWordAsc)
.limit(limit)
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(a, b) -> a, // 不会冲突;占位以满足toMap签名
LinkedHashMap::new // 保持有序(稳定输出)
));
}
/**
* 默认Top10的便捷方法。
*/
public static LinkedHashMap<String, Long> topFrequentKeywords(
List<String> titles,
Set<String> stopWords
) {
return topFrequentKeywords(titles, stopWords, DEFAULT_TOP_N);
}
// 示例主方法(可选)
public static void main(String[] args) {
List<String> titles = Arrays.asList(
"Java Streams in Action",
"Effective Java: Best Practices",
"Java & JVM: Memory Model Insights!!!",
"Stream processing with Java 17 and Spring",
"Top 10 Java Streams Tips & Tricks"
);
Set<String> stopWords = new HashSet<>(Arrays.asList(
"in", "and", "with", "the", "a", "of", "to", "for", "on",
"jvm", "17", "10", "&" // 数字和符号若需过滤可加入停用词
));
LinkedHashMap<String, Long> top = topFrequentKeywords(titles, stopWords, 10);
System.out.println(top);
}
}
代码说明
使用示例
说明:频次相同的多个词按词典序升序挑选,确保结果可预测。
注意事项
场景分析
代码实现
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public final class SlugGenerator {
// 配置
private static final int MAX_SLUG_LEN = 60;
private static final Locale LOCALE = Locale.ROOT;
// 预编译正则,避免重复创建
private static final Pattern WHITESPACE = Pattern.compile("\\s+");
private static final Pattern NON_ALNUM_OR_HYPHEN = Pattern.compile("[^a-z0-9-]");
private static final Pattern MULTI_HYPHEN = Pattern.compile("-{2,}");
private static final Pattern EDGE_HYPHENS = Pattern.compile("^-+|-+$");
private SlugGenerator() {}
/**
* 将商品名列表转换为唯一且<=60长度的slug列表(与输入顺序一致)。
*/
public static List<String> generateSlugs(List<String> names) {
if (names == null || names.isEmpty()) {
return Collections.emptyList();
}
// 冲突状态:每个“基底slug”的下一个可用后缀值,及全局已占用集合
Map<String, Integer> nextSuffix = new HashMap<>();
Set<String> taken = new HashSet<>();
// 顺序流(禁止并行)+ 两段映射:规范化 → 冲突消解
return names.stream()
.sequential()
.map(SlugGenerator::safeNormalizeBase) // 1) 规范化为基底slug(<=60)
.map(base -> ensureUnique(base, nextSuffix, taken)) // 2) 冲突处理并保证<=60
.collect(Collectors.toList());
}
/**
* 安全规范化:异常兜底为 "n"。
*/
private static String safeNormalizeBase(String raw) {
try {
return normalizeBaseSlug(raw, MAX_SLUG_LEN);
} catch (Exception e) {
// 极端异常兜底,保证流程不中断
return "n";
}
}
/**
* 生成“基底slug”:不带后缀,长度<=maxLen。
* 规则:trim → lower → 空白→- → 移除非[a-z0-9-] → 合并- → 去首尾- → 截断 → 再去首尾- → 兜底"n"
*/
static String normalizeBaseSlug(String raw, int maxLen) {
String s = raw == null ? "" : raw.trim().toLowerCase(LOCALE);
s = WHITESPACE.matcher(s).replaceAll("-");
s = NON_ALNUM_OR_HYPHEN.matcher(s).replaceAll("");
s = MULTI_HYPHEN.matcher(s).replaceAll("-");
s = EDGE_HYPHENS.matcher(s).replaceAll("");
if (s.isEmpty()) s = "n";
if (s.length() > maxLen) {
s = s.substring(0, maxLen);
s = EDGE_HYPHENS.matcher(s).replaceAll(""); // 截断后再次去首尾-
if (s.isEmpty()) s = "n";
}
return s;
}
/**
* 基于“基底slug”生成唯一slug:若冲突,按 -2、-3… 递增,并在追加前按后缀长度截断基底,确保总长<=MAX_SLUG_LEN。
*/
static String ensureUnique(String base,
Map<String, Integer> nextSuffix,
Set<String> taken) {
String candidate = base;
int suffix = nextSuffix.getOrDefault(base, 1);
// 尝试直接占用(首次出现且未被其他基底抢占时可成功)
if (!taken.add(candidate)) {
// 已冲突:从当前记录的suffix开始递增,生成 -2、-3...
do {
suffix++;
String suffixStr = "-" + suffix;
// 预留后缀长度,截断基底,保证总长度<=MAX_SLUG_LEN
int allowedBaseLen = Math.max(0, MAX_SLUG_LEN - suffixStr.length());
String trimmedBase = base.length() > allowedBaseLen
? EDGE_HYPHENS.matcher(base.substring(0, allowedBaseLen)).replaceAll("")
: base;
if (trimmedBase.isEmpty()) trimmedBase = "n";
candidate = trimmedBase + suffixStr;
} while (!taken.add(candidate)); // 直到唯一为止
nextSuffix.put(base, suffix);
} else {
// 记录当前基底的后缀起始(首次成功占用,下一次从-2开始)
nextSuffix.putIfAbsent(base, suffix);
}
return candidate;
}
// 方便单测或复用
public static void main(String[] args) {
List<String> input = Arrays.asList(
" Apple iPhone 15 Pro Max 256GB ",
"Apple iPhone 15 Pro Max 256GB", // 同名→ -2
"Sony WH-1000XM5 Headphones",
"Sony WH-1000XM5 Headphones", // 同名→ -2
" ",
null,
" ---### ", // 这些都会归一到 "n" 系列
"Cafe & Bar — Best-in-Class!",
"Cafe & Bar — Best in class", // 同名→ -2
"A very very very very very very very very very very long product name"
);
List<String> slugs = generateSlugs(input);
slugs.forEach(System.out::println);
}
}
代码说明
使用示例 输入:
可能的输出(示意,最后一项将被截断至<=60):
说明:
注意事项
依据订单、用户、日志等需求,快速生成筛选、分组、统计的流式代码,减少样板代码与调试时间。
固化团队编码规范,产出标准示例与注意事项,用于代码走查与性能指导,统一写法提升稳定性。
一键生成数据清洗、边界校验、用例构造代码,加速测试数据准备与断言执行。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
半价获取高级提示词-优惠即将到期