尽管java 8已经出现很久了,但很可惜最近才真正的使用它,特别是其提供的新特性Stream,真的特别强大,也很方便。在网上看了一些资料,发现都讲的特别多,特别泛,很官方。所以就想写一篇十分简单易懂的应用场景。
操作对象
首先提供一个测试用的操作对象CodeItem
public class CodeItem {
private String code;
private String name;
public CodeItem(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
场景一
现有一个CodeItem列表,需要把其中的code属性单独组成一个列表,特别在很多应用中经常需要将对象列表的ID抽出来。
Stream forEach方法
List<CodeItem> codeItems = Arrays.asList(
new CodeItem("3","c"),
new CodeItem("4","d"),
new CodeItem("5","e"));
List<String> codes = new ArrayList<>();
codeItems.stream().forEach(x->{
codes.add(codeItem .getCode());
});
Stream map 方法
List<CodeItem> codeItems = Arrays.asList(
new CodeItem("1","a"),
new CodeItem("3","c"),
new CodeItem("4","d"),
new CodeItem("5","e"));
List<String> codes = codeItems.stream().map(codeItem -> codeItem.getCode()).collect(Collectors.toList());
场景二
现有一个CodeItem列表,需要把其中的name属性等于**的对象过滤出一个列表。
Stream filter方法
List<CodeItem> codeItems = codeItems.stream().filter(codeItem -> codeItem.getCode().equals("4")||codeItem.getCode().equals("5")).collect(Collectors.toList());
场景三
现有一个String列表,要获得以某分隔符分隔的字符串,如果字符串列表是[1,2,3],则得到的字符串是”1,2,3”
Stream filter方法
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list.stream().map(item -> item).collect(Collectors.joining(",")));
当然Stream的应用远远不止这么多,在这里只是简单的分享最常用的3种方法,上面的三种方法还可以进行组合,大家可以自己研究一下。