Java 使用流从地图填充对象列表

Java 使用流从地图填充对象列表,java,java-stream,Java,Java Stream,我有下面的地图和一个字符串 /** 4->"welcome" 3->"to" 2->"my" 1->"blog" */ Map<Integer, String> myMap = ImmutableMap.of(4, "welcome", 3, "to", 2, "my",1,"blog"); String s= "welcome to my blog everyone" 列表的类型为Delete public class Delete { priv

我有下面的地图和一个字符串

/**
4->"welcome"
3->"to"
2->"my"
1->"blog"
*/

Map<Integer, String> myMap = ImmutableMap.of(4, "welcome", 3, "to", 2, "my",1,"blog");
String s= "welcome to my blog everyone"
列表的类型为Delete

public class Delete {
    private Integer level;
    private String modString;
    private List<String> delete;

    public Delete(
            Integer level,
            String modString,
            List<String> delete) {
        this.level = level;
        this.modString = modString;
        this.delete = delete;
    }

 //getters and setters

    }

}

我可以通过迭代贴图来实现,但我在想,是否可以使用流来实现这一点。

我不太明白贴图键的用途以及它们与级别的关系。但我假设您希望lambdas中的java变量的解决方案必须是最终的。为此,您可以在同一个包中使用java.util.concurrent.AtomicReference或其他类

final AtomicReference<String> modString = new AtomicReference<>(s);
final Comparator<Map.Entry<Integer, String>> comparing = Comparator.comparing(Map.Entry::getKey);
final List<String> deletedOnes = new ArrayList<>(myMap.size());
final List<Delete> result = myMap.entrySet().stream().sorted(comparing.reversed()).map(entry -> {
    deletedOnes.add(entry.getValue());
    modString.set(modString.get().replaceFirst(entry.getValue(), "").trim());
    return new Delete(myMap.size() - entry.getKey() + 1, modString.get(), new ArrayList<>(deletedOnes));
}).collect(Collectors.toList());
你看过吗?
final AtomicReference<String> modString = new AtomicReference<>(s);
final Comparator<Map.Entry<Integer, String>> comparing = Comparator.comparing(Map.Entry::getKey);
final List<String> deletedOnes = new ArrayList<>(myMap.size());
final List<Delete> result = myMap.entrySet().stream().sorted(comparing.reversed()).map(entry -> {
    deletedOnes.add(entry.getValue());
    modString.set(modString.get().replaceFirst(entry.getValue(), "").trim());
    return new Delete(myMap.size() - entry.getKey() + 1, modString.get(), new ArrayList<>(deletedOnes));
}).collect(Collectors.toList());