栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

收集HashSet / Java 8 / Regex模式/流API

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

收集HashSet / Java 8 / Regex模式/流API

Matcher
如果您重复使用JDK提供的,基于A 的分离器实现可能非常简单
Spliterators.AbstractSpliterator

public class MatcherSpliterator extends AbstractSpliterator<String[]>{  private final Matcher m;  public MatcherSpliterator(Matcher m) {    super(Long.MAX_VALUE, ORDERED | NonNULL | IMMUTABLE);    this.m = m;  }  @Override public boolean tryAdvance(Consumer<? super String[]> action) {    if (!m.find()) return false;    final String[] groups = new String[m.groupCount()+1];    for (int i = 0; i <= m.groupCount(); i++) groups[i] = m.group(i);    action.accept(groups);    return true;  }}

请注意,分隔符提供 所有 匹配器组,而不仅仅是完整匹配。另请注意,此分离器支持并行性,因为它

AbstractSpliterator
实现了分离策略。

通常,您将使用便利流工厂:

public static Stream<String[]> matcherStream(Matcher m) {  return StreamSupport.stream(new MatcherSpliterator(m), false);}

这为您简洁地编写各种复杂的面向正则表达式的逻辑提供了强大的基础,例如:

private static final Pattern emailRegex = Pattern.compile("([^,]+?)@([^,]+)");public static void main(String[] args) {  final String emails = "kid@gmail.com, stray@yahoo.com, miks@tijuana.com";  System.out.println("User has e-mail accounts on these domains: " +      matcherStream(emailRegex.matcher(emails))      .map(gs->gs[2])      .collect(joining(", ")));}

哪些印刷品

User has e-mail accounts on these domains: gmail.com, yahoo.com, tijuana.com

为了完整起见,您的代码将被重写为

Set<String> set = matcherStream(mtr).map(gs->gs[0].toLowerCase()).collect(toSet());


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/463966.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号