小编use*_*328的帖子

如何在java 8中展平地图列表

我有要求我有地图列表

[{Men=1},{Men=2, Women=3},{Women=2,Boys=4}]
Run Code Online (Sandbox Code Playgroud)

现在我需要使它成为一个flatMap,看起来像

Gender=countOfValues
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,输出将是

{Men=3,Women=5,Boys=4}
Run Code Online (Sandbox Code Playgroud)

目前我有以下代码:

private Map<String, Long> getGenderMap(
        List<Map<String, Long>> genderToCountList) {
    Map<String, Long> gendersMap = new HashMap<String, Long>();
    Iterator<Map<String, Long>> genderToCountListIterator = genderToCountList
            .iterator();
    while (genderToCountListIterator.hasNext()) {
        Map<String, Long> genderToCount = genderToCountListIterator.next();
        Iterator<String> genderToCountIterator = genderToCount.keySet()
                .iterator();
        while (genderToCountIterator.hasNext()) {
            String gender = genderToCountIterator.next();
            if (gendersMap.containsKey(gender)) {
                Long count = gendersMap.get(gender);
                gendersMap.put(gender, count + genderToCount.get(gender));
            } else {
                gendersMap.put(gender, genderToCount.get(gender));
            }
        }
    }
    return gendersMap;
}
Run Code Online (Sandbox Code Playgroud)

我们如何使用lambda表达式使用Java8编写这段代码?

java lambda java-8

5
推荐指数
1
解决办法
5940
查看次数

AVRO中的数据验证

我是AVRO的新手,请问这是一个简单的问题。我有一个用例,其中我使用AVRO模式进行记录调用。

假设我有Avro模式

{
    "name": "abc",
    "namepsace": "xyz",
    "type": "record",
    "fields": [
        {"name": "CustId", "type":"string"},
        {"name": "SessionId", "type":"string"},
     ]
}
Run Code Online (Sandbox Code Playgroud)

现在,如果输入像

{
    "CustId" : "abc1234"
    "sessionID" : "000-0000-00000"
}
Run Code Online (Sandbox Code Playgroud)

我想对这些字段使用一些正则表达式验证,并且仅当输入格式如上所示时才接受此输入。有什么方法可以在avro模式中指定包含正则表达式的表达式吗?

还有其他支持这样的数据序列化格式吗?

rpc json-rpc data-serialization avro avro4s

5
推荐指数
1
解决办法
3509
查看次数

在Java8中比较By Value返回奇怪的结果

我正在尝试根据值对地图进行排序.

但我看到以下程序有一些奇怪的行为

public class CompareByValueMain {

    public static void main(String[] args) {
        Map<String,Integer> itemIDToTimeMap = new HashMap<String,Integer>();

        itemIDToTimeMap.put("Baggage", 3);
        itemIDToTimeMap.put("Handbag", 16);
        itemIDToTimeMap.put("Closed Footwear", 4);
        itemIDToTimeMap.put("Shirt", 25);

        Set<String> itemIDs = itemIDToTimeMap.entrySet().stream()
                .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
                .map(Map.Entry::getKey)
                .collect(Collectors.toSet());

        System.out.println(itemIDs);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出结果是正确的

[衬衫,手提包,封闭式鞋类,行李 ]

但是当我从Baggage改为Bag时的输入 它给出了以下输出

[衬衫,包,手提包,封闭式鞋]

理想情况下,应根据地图中的值进行排序,而不管键值如何.但是如果在这里更改密钥,不确定为什么会改变.

java dictionary java-8

2
推荐指数
2
解决办法
241
查看次数

标签 统计

java ×2

java-8 ×2

avro ×1

avro4s ×1

data-serialization ×1

dictionary ×1

json-rpc ×1

lambda ×1

rpc ×1