当前位置: 首页 > 知识库问答 >
问题:

如何使用映射修改流中的现有元素?

程志新
2023-03-14

我有一个我搜索的对象,该对象存储在一个流中。我想让用户能够修改现有流中的元素,并用修改后的元素更新现有列表,而不是创建一个新的列表。这个问题与这个问题相似,只是用户正在将修改后的元素添加到一个新的列表中

else if (choice == 2){
            System.out.println("\nEnter the name of the movie you would like to modify (Case Sensitive): ");
            String search = scan.nextLine();

            Optional<Item> item = items.stream()
                    .map(x->{
                        if(x.getItems()==null){
                            return Collections.singletonList(x);
                        }
                        x.getItems().getItem().add(x);
                        return x.getItems().getItem();
                    })
                    .flatMap(Collection::stream)
                    .filter(x -> x.getName().equals(search))
                    .peek(x-> x.setItems(null))//Peek exists mainly to support debugging
                    .findFirst();
            System.out.println(item.toString());

            System.out.println("\nEnter the new datatype of the movie (Number): ");
            String userChoice = scan.nextLine();

            System.out.println("\nEnter the new name of the movie: ");
            String userChoice1 = scan.nextLine();

            System.out.println("\nEnter the new data ID for the movie (Number): ");
            int userChoice2 = scan.nextInt();
            scan.nextLine();

            System.out.println("\nEnter the new group for the movie: ");
            String userChoice3 = scan.nextLine();

            Collection::stream =
                    item.map(s -> s.setDataType(userChoice) + s.setName(userChoice1) + s.setData(userChoice2) + s.setGroup(userChoice3));
        }
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

@XmlRootElement(name = "items")
public class Items {
    private List<Item> item;

    @XmlElement(name = "item")
    public List<Item> getItem(){
        return item;
    }

    public void setItem(List<Item> itemList){
        this.item = itemList;
    }

    @Override
    public String toString() {
        return "\n" + item ;
    }
}

项目类别

import javax.xml.bind.annotation.XmlElement;

public class Item {
    private String dataType;
    private String name;
    private int data;
    private String group;
    private Items items;

    @XmlElement
    public String getDataType(){
        return dataType;
    }
    public void setDataType(String dataType){
        this.dataType = dataType;
    }

    @XmlElement
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }

    @XmlElement
    public int getData(){
        return data;
    }
    public void setData(int data){
        this.data = data;
    }

    @XmlElement
    public String getGroup(){
        return group;
    }
    public void setGroup(String group){
        this.group = group;
    }

    public Items getItems() {
        return items;
    }

    public void setItems(Items items) {
        this.items = items;
    }

    @Override
    public String toString() {
        return
                "\n\tDataType: " + dataType +
                "\n\tName: " + name +
                "\n\tData: " + data +
                "\n\tGroup: " + group +
                "\n\tItems: " + items + "\n";
    }

    public String singleObject(){
        return
                "\n\tDataType: " + dataType +
                "\n\tName: " + name +
                "\n\tData: " + data +
                "\n\tGroup: " + group;
    }

}

共有1个答案

林建本
2023-03-14

我看到,在主函数中,您要求用户提供电影的名称,然后提供要修改的字段。所以在询问用户所有问题后,可以使用以下操作:

items.stream()
     // search for the movie by name
     .filter(x -> x.getName().equals(search))
     .findFirst()
     // if present then modify it
     .ifPresent(i -> {
        i.setDataType(userChoice);
        i.setName(userChoice1);
        i.setData(userChoice2);
        i.setGroup(userChoice3);
        i.setItems(null);
        });

这样列表就被修改到位了。

 类似资料:
  • 我看不出如何在函数式中做到这一点:map/hashmap不实现。 返回一个,我可以对其进行流式传输,但如何将新的添加到目标映射?

  • 问题内容: 我有这样的课: 我想为每个MultiDataPoint生成 当然,在多个MultiDataPoints中,“键”可以相同。 因此,给定a ,如何使用Java 8流转换为? 这是我目前在没有流的情况下进行转换的方式: 问题答案: 这是一个有趣的问题,因为它表明有很多不同的方法可以达到相同的结果。下面我展示了三种不同的实现。 集合框架中的默认方法: Java 8向集合类中添加了一些与 St

  • 问题内容: 给定一个Person上具有(etc)方法的where,我该如何将其转换为通过调用获得的where ? 我会使用Java 8之前的版本 但我想使用流和lambda做到这一点。 我看不到如何以功能样式执行此操作:Map / HashMap不实现。 返回可以流式传输的,但是如何向目的地地图添加新的内容? 问题答案: 使用Java 8,您可以执行以下操作: 尽管使用Guava的Maps.tra

  • 我即将掌握新的Java8流和lambda选项,但仍有一些微妙之处我还没有完全理解。 假设我有一张地图,上面的键是人名。每个名字的值都是年龄和实例的映射。进一步假设不存在多个具有相同姓名和年龄的人。 在填充该地图(其他地方)后,我想为每个名字生成另一张最年长者的地图。我想得到一张

  • 我想要一个流的等价物: 这段代码实际上并不编译,因为0不能分配给类型T,但您明白了。