关于将字符串列表更改为每个元素和其他元素的映射列表

时间:2018-08-20 12:43:14

标签: java-8

有一个列表:[“ aaa”,“ bbb”,“ ccc”]

我想将其转换为以下结构

[{
    main = aaa,
    others = [bbb, ccc]
}, {
    main = bbb,
    others = [aaa, ccc]
}, {
    main = ccc,
    others = [aaa, bbb]
}]

现在我的方式是

List<String> list = newArrayList("aaa", "bbb", "ccc");
List<ImmutableMap<String, Object>> mainAndOthersList = list.stream().map(s -> ImmutableMap.of("main", s, "others", list.stream().filter(s2 -> !s2.equals(s)).collect(toList()))).collect(toList());
System.out.println(mainAndOthersList);

还有其他实现方式吗?

2 个答案:

答案 0 :(得分:1)

这里是不带流的替代方法,从主观上讲更容易或更难阅读。

List<String> list = Arrays.asList("aaa", "bbb", "ccc");
List<Map<String,Object>> result = new ArrayList<>();
for(int i = 0; i < list.size(); i++) {
    Map<String,Object> map = new HashMap<>();
    List<Object> innerList = new ArrayList<>(list);
    map.put((String)innerList.remove(i), innerList);
    result.add(map);
}

答案 1 :(得分:0)

如果$ grep "$P" input.txt <No output> 内的元素不是字符串,并且可以使用List,则基本上可以对索引进行流处理:

java-9

但是请注意,这几乎与您已经在做的一样。