如何解决如何将流收集到 JAX-RS MultivaluedMap 中?
如何将 private void RichText_TextChanged(object sender,TextChangedEventArgs e)
{
var factory = new RankedLanguageIdentifierFactory();
try
{
var identifier = factory.Load("Core14.profile.xml");
// can be an absolute or relative path. Beware of 260 chars limitation of the path length in Windows. Linux allows 4096 chars.
string text = new TextRange(RichText.Document.ContentStart,RichText.Document.ContentEnd).Text;
var languages = identifier.Identify(text);
var mostCertainLanguage = languages.FirstOrDefault();
if (mostCertainLanguage != null)
if ((mostCertainLanguage.Item1.Iso639_3.Equals("eng")) || (mostCertainLanguage.Item1.Iso639_3.Equals("fra")))
{
RichText.FlowDirection = FlowDirection.LeftToRight;
}
else if (mostCertainLanguage.Item1.Iso639_3.Equals("dan"))
{
RichText.FlowDirection = FlowDirection.RightToLeft;
}
}
catch (Exception es)
{
Console.WriteLine("Exception " + es);
}
}
项收集到 MultivaluedMap
中?内置的 Java Stream
收集器不能很好地用于此目的,因为它们希望对地图的列表类型 (Map
) 进行操作,而不是 K,List<V>
的类型(MultivaluedMap
)。
解决方法
Stream.collect(supplier,accumulator,combiner)
方法可用于完成此操作。以下内容将从流和任意 MultivaluedMap
& keyFn
Function
对创建 valueFn
:
MultivaluedMap<K,V> multimap = list.stream().collect(
MultivaluedHashMap::new,(multimap,input) -> multimap.add(keyFn.apply(input),valueFn.apply(input)),MultivaluedMap::putAll);
根据 Stream.collect
Javadoc:
对此流的元素执行 mutable reduction 操作。可变归约是指其中归约的值是可变结果容器,例如 ArrayList
,并且通过更新结果的状态而不是替换结果来合并元素。
由于可以并行处理流,因此可能会创建多个临时 MultivaluedMap
实例,每个实例都包含 Stream
值的子集。通过使用 MultivaluedMap
将临时多映射中的所有元素放入其中一个多映射中,然后将其作为最终结果返回,从而将临时多映射组合成单个 putAll
。
作为一个具体示例,以下代码可用于从 MultivaluedMap
创建一个 Stream<String>
,其中键是字符串的长度,值是字符串本身:
Stream<String> strings = Stream.of("Ant","Ball","Cat","Ant","House");
MultivaluedMap<Integer,String> stringsByLength = strings.collect(
MultivaluedHashMap::new,input) -> multimap.add(input.length(),input),MultivaluedMap::putAll
);
System.out.println(stringsByLength); // {3=[Ant,Cat,Ant],4=[Ball],5=[House]}
这使用 new MultivaluedHashMap()
创建新的多重映射,使用 MultivaluedMap.add()
向多重映射添加元素,并使用 MultivaluedMap.putAll()
将多重映射组合在一起。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。