Java peek和map如何在流中工作
我试图了解Java8流中peek和map的不同Java peek和map如何在流中工作,java,java-stream,Java,Java Stream,我试图了解Java8流中peek和map的不同 public static void main(String[] args) { List<String> arr = new ArrayList<String>(); arr.add("A"); arr.add("B"); List<String> a = arr.stream().peek(t->t.toLowerCase()).col
public static void main(String[] args) {
List<String> arr = new ArrayList<String>();
arr.add("A");
arr.add("B");
List<String> a = arr.stream().peek(t->t.toLowerCase()).collect(Collectors.toList());
System.out.println(a);
}
publicstaticvoidmain(字符串[]args){
List arr=new ArrayList();
协议补充(“A”);
协议添加(“B”);
列表a=arr.stream().peek(t->t.toLowerCase()).collect(collector.toList());
系统输出打印项次(a);
}
上面的代码并没有将字母表改成小写
public static void main(String[] args) {
List<String> arr = new ArrayList<String>();
arr.add("A");
arr.add("B");
List<String> a = arr.stream().map(t->t.toLowerCase()).collect(Collectors.toList());
System.out.println(a);
}
publicstaticvoidmain(字符串[]args){
List arr=new ArrayList();
协议补充(“A”);
协议添加(“B”);
列表a=arr.stream().map(t->t.toLowerCase()).collect(collector.toList());
系统输出打印项次(a);
}
字母表被转换成更小的大小写。我怀疑我是否同时使用了下面的map和peek
public static void main(String[] args) {
List<String> arr = new ArrayList<String>();
arr.add("A");
arr.add("B");
List<String> a = arr.stream().map(t->t.toLowerCase()).peek(t->toUpper()).collect(Collectors.toList());
System.out.println(a);
}
public static Function<String, String> toUpper(){
return t->{
return t.toUpperCase();
};
}
publicstaticvoidmain(字符串[]args){
List arr=new ArrayList();
协议补充(“A”);
协议添加(“B”);
列表a=arr.stream().map(t->t.toLowerCase()).peek(t->toUpper()).collect(Collectors.toList());
系统输出打印项次(a);
}
公共静态函数toUpper(){
返回t->{
返回t.toUpperCase();
};
}
map方法将A、B转换为lower,Peek不做任何操作。因此,如果流媒体时涉及任何计算,我不能使用Peek吗?有人能解释一下吗
修改代码
static List<Employee> e = new ArrayList<>();
public static void main(String[] args) {
List<String> arr = new ArrayList<String>();
arr.add("Pavan");
arr.add("Kumar");
System.out.println("Size of emp"+e.size());
List<String> a = arr.stream().map(t->t.toLowerCase()).peek(t->populateEmp()).collect(Collectors.toList());
System.out.println("Size of emp"+e.size());
System.out.println(a);
}
public static Function<String, Employee> populateEmp(){
Employee ee = new Employee();
return t->{
System.out.println(t);
ee.setName(t);
e.add(ee);
return ee;
};
}
static List e=new ArrayList();
公共静态void main(字符串[]args){
List arr=new ArrayList();
arr.add(“Pavan”);
arr.add(“Kumar”);
System.out.println(“emp的大小”+e.Size());
列表a=arr.stream().map(t->t.toLowerCase()).peek(t->populateEmp()).collect(Collectors.toList());
System.out.println(“emp的大小”+e.Size());
系统输出打印项次(a);
}
公共静态函数populateEmp(){
员工ee=新员工();
返回t->{
系统输出打印ln(t);
ee.集合名(t);
e、 添加(ee);
返回ee;
};
}
这仍然没有将Emp添加到列表中Peek需要一个,因此如果您使用toLowerCase(),您将创建一个新字符串,该字符串将作废。您可以在使用者内部修改此对象,但字符串是不可变的,所以peek无效
当您使用映射时,您希望传递一个or,它接收单个对象并返回单个对象。因此,返回小写的新字符串
在这两种情况下,都不会克隆对象。因此,您可以修改peek函数中可变的对象,但这是错误的方法:)尝试传递日期,然后您可以在peek函数中设置小时,因为它是可变的
简言之:
- 使用贴图将模型转换为另一个模型
- 使用peek执行使用此对象的操作,但不会修改它(发送通知、打印模型等)
public static Function<String, Employee> populateEmp(){
Employee ee = new Employee();
System.out.print("I am executed");
return t->{
System.out.print("I am not");
return null;
};
}
因此,用以下内容替换您的窥视:
.peek(t->populateEmp().apply(t))
Peek需要一个,因此如果您使用toLowerCase(),您将创建一个新字符串,该字符串将作废。您可以在使用者内部修改此对象,但字符串是不可变的,所以peek无效
当您使用映射时,您希望传递一个or,它接收单个对象并返回单个对象。因此,返回小写的新字符串
在这两种情况下,都不会克隆对象。因此,您可以修改peek函数中可变的对象,但这是错误的方法:)尝试传递日期,然后您可以在peek函数中设置小时,因为它是可变的
简言之:
- 使用贴图将模型转换为另一个模型
- 使用peek执行使用此对象的操作,但不会修改它(发送通知、打印模型等)
public static Function<String, Employee> populateEmp(){
Employee ee = new Employee();
System.out.print("I am executed");
return t->{
System.out.print("I am not");
return null;
};
}
因此,用以下内容替换您的窥视:
.peek(t->populateEmp().apply(t))
如果我将这些字符串添加到peek中的列表中会怎么样。这会将这些字符串添加到列表中吗?当您在列表中使用流时,peek和map将应用于每个列表元素。所以,如果你有一系列的列表,那么你可以在每个列表中添加一些peek中的内容。与将列表传递给方法相同,并在那里修改它。但是,正如我所说的,这是一种糟糕的做法。如果我在peek中将这些字符串添加到一个列表中会怎么样呢..这会将这些字符串添加到列表中吗?当您在列表中使用流时,peek和map将应用于每个列表元素。所以,如果你有一系列的列表,那么你可以在每个列表中添加一些peek中的内容。与将列表传递给方法相同,并在那里修改它。但正如我所说,这是一种糟糕的做法。