Java流如何在列表的嵌套列表中添加值

时间:2019-03-21 14:00:38

标签: java java-8

我有一个List<List<Object>>类型的数据。我需要在“列表”列表中添加相同的值。 我尝试了以下操作,但由于其类型为List<Boolean>,因此无法正常工作。

List<List<Object>> data = ...;
data.stream().map(v -> v.add("test")).collect(Collectors.toList());

如何获得相同类型的List<List<Object>>

我有以下数据:

"data": [
        [
            5,
            "Johnny",
            "Lollobrigida"                
        ],
        [
            6,
            "Bette",
            "Nicholson"               
        ],
        [
            7,
            "Grace",
            "Mostel"                
        ],
        [
            8,
            "Matthew",
            "Johansson"                
        ]
     ]

我想将其更改为:

"data": [
        [
            5,
            "Johnny",
            "Lollobrigida",
            "test"
        ],
        [
            6,
            "Bette",
            "Nicholson",
            "test"               
        ],
        [
            7,
            "Grace",
            "Mostel" ,
            "test"               
        ],
        [
            8,
            "Matthew",
            "Johansson",
            "test"                
        ]
     ]

3 个答案:

答案 0 :(得分:5)

@蜘蛛鲍里斯(Boris the Spider)是正确的:forEach:

data.forEach(v -> v.add("test"));

答案 1 :(得分:2)

List.add()返回一个boolean,但是您希望您的map()返回添加了新元素的List

您需要:

List<List<Object>> out = 
    data.stream()
        .map(v -> {v.add("test"); return v;})
        .collect(Collectors.toList());

请注意,如果您不想变异原始的内部List,则可以创建它们的副本:

List<List<Object>> out = 
    data.stream()
        .map(v -> {
            List<Object> l = new ArrayList<>(v);
            l.add("test"); 
            return l;
        })
        .collect(Collectors.toList());

答案 2 :(得分:2)

添加元素后,您需要从map返回列表。以下解决方案应为您工作:

List<List<Object>> dataModified = data.stream().map(v -> {
    v.add("test");
    return v;
}).collect(Collectors.toList());