我有一个我搜索的对象,该对象存储在一个流中。我想让用户能够修改现有流中的元素,并用修改后的元素更新现有列表,而不是创建一个新的列表。这个问题与这个问题相似,只是用户正在将修改后的元素添加到一个新的列表中
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;
}
}
我看到,在主函数中,您要求用户提供电影的名称,然后提供要修改的字段。所以在询问用户所有问题后,可以使用以下操作:
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
在java中,如何创建
问题内容: 给定一个Person上具有(etc)方法的where,我该如何将其转换为通过调用获得的where ? 我会使用Java 8之前的版本 但我想使用流和lambda做到这一点。 我看不到如何以功能样式执行此操作:Map / HashMap不实现。 返回可以流式传输的,但是如何向目的地地图添加新的内容? 问题答案: 使用Java 8,您可以执行以下操作: 尽管使用Guava的Maps.tra
我即将掌握新的Java8流和lambda选项,但仍有一些微妙之处我还没有完全理解。 假设我有一张地图,上面的键是人名。每个名字的值都是年龄和实例的映射。进一步假设不存在多个具有相同姓名和年龄的人。 在填充该地图(其他地方)后,我想为每个名字生成另一张最年长者的地图。我想得到一张
我想要一个流的等价物: 这段代码实际上并不编译,因为0不能分配给类型T,但您明白了。