使用Collator在一行中收集到TreeMap

贾格尔:

我有以下代码。

import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

public final class Main {
    public static void main(final String[] args) {
        final Object[][] pairs = { { "Arka Gdynia", Collections.emptyList() },
                { "Legia Warszawa", Collections.emptyList() }, { "ŁKS Łódź", Collections.emptyList() },
                { "Śląsk Wrocław", Collections.emptyList() }, { "Wisła Kraków", Collections.emptyList() }, };

        final Map<String, Object> clubPlayerMap = Arrays.stream(pairs)
                .collect(Collectors.toMap(c -> c[0].toString(), c -> c[1], (o1, o2) -> o1, TreeMap::new));
        for (final String key : clubPlayerMap.keySet()) {
            System.out.println(key);
        }
    }
}

不幸的是,这并没有产生我想要的结果。密钥需要根据波兰语归类进行排序。

Arka Gdynia
Legia Warszawa
Wisła Kraków
ŁKS Łódź
Śląsk Wrocław

我期望的结果是

Arka Gdynia
Legia Warszawa
ŁKS Łódź
Śląsk Wrocław
Wisła Kraków

因此,我用Google搜索,找到了一种使用的方法java.text.Collator但是,我想知道是否有可能与stream()一起做一线工作collect()

我提出的解决方案如下,但是不幸的是,它并不是很整洁。

import java.text.Collator;
import java.util.Arrays;
import java.util.Collections;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

public final class Main {
    public static void main(final String[] args) {
        final Object[][] pairs = { { "Arka Gdynia", Collections.emptyList() },
                { "Legia Warszawa", Collections.emptyList() }, { "ŁKS Łódź", Collections.emptyList() },
                { "Śląsk Wrocław", Collections.emptyList() }, { "Wisła Kraków", Collections.emptyList() }, };

        final Map<String, Object> clubPlayerMapCollated = new TreeMap<>(Collator.getInstance(new Locale("pl", "PL")));
        final Map<String, Object> clubPlayerMap = Arrays.stream(pairs)
                .collect(Collectors.toMap(c -> c[0].toString(), c -> c[1], (o1, o2) -> o1, TreeMap::new));
        clubPlayerMapCollated.putAll(clubPlayerMap);
        for (final String key : clubPlayerMapCollated.keySet()) {
            System.out.println(key);
        }
    }
}

可以单线生成地图吗?

他们是 :

而不是传递对默认构造函数(TreeMap::new的方法引用,而是传递将生成所需的lambda表达式TreeMap

final Map<String, Object> clubPlayerMap = 
    Arrays.stream(pairs)
          .collect(Collectors.toMap(c -> c[0].toString(), 
                                    c -> c[1], 
                                    (o1, o2) -> o1, 
                                    () -> new TreeMap<>(Collator.getInstance(new Locale("pl", "PL")))));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果 Name-row 为空 CSV,则将行收集到一行中

如何在流中收集到TreeMap中?

是否可以使用一行将流收集到两个不同的集合?

将同一天的所有数据收集到一行

如何使用groupBy将行收集到地图中?

如何使用Java流将多个列表收集到一个列表中?

使用VBA收集到Excel中的VBA值

使用Scrapy将数据收集到CSV文件中

Oracle 使用 LOOP 批量收集到集合中

Java Stream以相反的顺序收集到TreeMap

Java Stream-将数据行收集到更少的行中,并将一列分组

如何將包含相同文本的所有行收集到另一個數據框中

将输入收集到数组中

使用流收集到地图

如何将所有使用@RequestParam注释的字段收集到一个对象中

批量收集到一个UNION查询到对象表中

将 JSON 文件中的所有元素收集到一个列表中

如何将其他列中的字符收集到一列中?

如何将所有类型收集到 Laravel 中的一张表中?

将行计数收集到新列中-按列文本并按组重置计数

gulp可以将grep:ed的行收集到单个输出文件中吗?

是否可以将多个异常收集到一个自定义异常中?

如何在Python中将元组列表收集到一个元组中?

将可迭代对象收集到一个变量中(列表)

将可观察的分组排放物收集到一个列表中

将多行内容收集到一个输出中

将多列收集到一个键和两个值中

Java流将数组收集到一个列表中

将PySpark数据框过滤器的结果收集到一个变量中