import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"111,1","222,2","333,3","444,4","555,5","666,6");
Map<String, Integer> collect = list.stream()
.filter(s -> Integer.parseInt(s.split(",")[1]) > 4)
.map((String s) -> Integer.parseInt(s.split(",")[1]))
.collect(Collectors.toMap(integer->String.valueOf(integer), integer->integer));
System.out.println(collect);
}
}
一、实例解析
1、首先定义一个list列表,然后添加"111,1","222,2","333,3","444,4","555,5","666,6"
元素。
2、使用list的stream流对数据进行处理。
3、filter的作用为过滤,.filter(s -> Integer.parseInt(s.split(",")[1]) > 4)
为lambda表达式,原型为
list.stream().filter(new Predicate<String>() {
@Override
public boolean test(String s) {
return Integer.parseInt(s.split(",")[1]) > 4;
}
});
就是将list中的每个元素以逗号分隔,然后将第二个数据转换为int类型后将大于4的元素过滤出来。
4、map的左右主要是执行一些处理.map((String s) -> Integer.parseInt(s.split(",")[1]))
此处为lambda表达式,原型为:
list.stream().map(new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return Integer.parseInt(s.split(",")[1]);
}
});
就是将前面过滤后的元素以逗号分隔,然后将第二个元素转换为int型。
5、collect的左右为收集器,主要作用是收集元素,.collect(Collectors.toMap(integer->String.valueOf(integer), integer->integer));
主要作用是将过滤、转换后的元素用map收集起来,也可以用list和set。原型为:
list.stream().collect(Collectors.toMap(new Function<Integer, String>() {
@Override
public String apply(Integer integer) {
return String.valueOf(integer);
}
}, new Function<Integer, Integer>() {
@Override
public Integer apply(Integer integer) {
return integer;
}
}));
二、结果输出
{5=5, 6=6}