您当前的位置: 首页 > 

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【精品】Lambda表达式操作集合

梁云亮 发布时间:2019-10-19 11:52:23 ,浏览量:1

Lambda表达式操作集合

本博客数据来源:示例数据

示例:将字符串型形式的id转换成集合
public static void main(String[] args) {
    String ids ="1,2,3,4,5,6,7,8,9";
    String[] split = ids.split(",");
    int[] ints = Arrays.stream(split).mapToInt(Integer::parseInt).toArray();
    System.out.println(Arrays.toString(ints));
    //或者
    int[] ints2 = Arrays.stream(split).mapToInt(Integer::parseInt).toArray();
    System.out.println(Arrays.toString(ints2));
}
示例1:对List进行迭代
public static void main(String[] args) {
    List deptList = Arrays.asList(new Dept(1, "OPERATION", "BOSTON"),
            new Dept(3, "SALES", "CHICAGO"), new Dept(4, "ACCOUNTING", "NEW YORK"),
	new Dept(2, "RESEARCH", "DALLAS"));
deptList.forEach(item -> System.out.println(item));
deptList.forEach(dept-> dept.getEmps().forEach(System.out::println)); //遍历双重循环
}
示例2:对List进行排序
public class LambdaTest{
    List deptList;
    @Before
    public void before() {
        deptList = Arrays.asList(new Dept(1, "OPERATION", "BOSTON"),
 		new Dept(2, "RESEARCH", "TOKYO"), new Dept(3, "SALES", "CHICAGO"),
             new Dept(4, "ACCOUNTING", "NEW YORK"), new Dept(2, "RESEARCH", "DALLAS"));
    }
    @Test
    public void fun1() {  //基本排序
        deptList.sort((dept1, dept2) -> dept1.getDname().compareTo(dept2.getDname()));
        deptList.forEach(item -> System.out.println(item));
    }
    @Test
    public void fun2() { //排序完逆序
        Comparator comparator = (dept1, dept2) -> 
			dept1.getDname().compareTo(dept2.getDname());
        deptList.sort(comparator.reversed());
        deptList.forEach(item -> System.out.println(item));
    }
    public static int compareByDnameThenLoc(Dept dept1, Dept dept2) {
        if (dept1.getDname().equals(dept2.getDname())) {
            return dept1.getLoc().compareTo(dept2.getLoc());
        } else {
            return dept1.getDname().compareTo(dept2.getDname());
        }
    }
    @Test
    public void fun3() {//使用静态方法的引用来排序
        deptList.sort(LambdaTest::compareByDnameThenLoc);
        deptList.forEach(item -> System.out.println(item));
    }
    @Test
    public void fun4() {//多条件排序
        deptList.sort((dept1, dept2) -> {
            if (dept1.getDname().equals(dept2.getDname())) {
                return dept1.getLoc().compareTo(dept2.getLoc());
            } else {
                return dept1.getDname().compareTo(dept2.getDname());
            }
        });
        deptList.forEach(item -> System.out.println(item));
    }
    @Test
    public void fun5() {//提取Comparator排序
        Collections.sort(deptList, Comparator.comparing(Dept::getDname));
        deptList.forEach(item -> System.out.println(item));
    }
    @Test
    public void fun6() {//多条件组合排序
        Collections.sort(deptList, Comparator.comparing(Dept::getDname)
				.thenComparing(Dept::getLoc));
        deptList.forEach(item -> System.out.println(item));
    }
}
示例3:List元素去除重复
public static void main(String[] args) throws IOException {
	List list = Arrays.asList("aa","bb","cc","aa","dd");
list.stream().distinct().collect(Collectors.toList())
			.forEach(System.out::println);
}
示例4:分别对List的每一个元素进行处理
public static void main(String[] args) {
    List list = Arrays.asList("zhangsan", "lisi", "wanger", "mzai");
    list.stream().map(item -> item+" : "+item.toUpperCase()).forEach(System.out::println);
}
示例5:对List中的元素进行转换
public static void main(String[] args) throws IOException {
	Dept accounting = new Dept((byte)10, "ACCOUNTING","NewYork");
	Dept research = new Dept((byte)20, "RESEARCH","Dallas");
	Dept sales = new Dept((byte)30, "SALES","Chicago");
	Dept operations = new Dept((byte)40, "OPERATIONS","Boston");
	List list = new ArrayList();
	list.add(accounting);
	list.add(research);
	list.add(sales);
	list.add(operations);
	List dnameList = list.stream().map(item->item.getDname())
								.collect(Collectors.toList());
dnameList.forEach(System.out::println);
}
示例6:对List中的元素进行过滤
public static void main(String[] args) {
    List list = Arrays.asList("zhangsan", "lisi", "wanger", "mzai");
    List res = list.stream().filter(item -> item.length() > 5)
			.collect(Collectors.toList());
res.forEach(System.out::println);

List numberList = Arrays.asList(1, 2, 3, 4, 5);
numberList.stream().filter(i -> i % 2 == 0).forEach(System.out::println);
}
示例7:将List中的字符串换成小写并用#号链接起来
  • 实现一

    public static void main(String[] args) {
        List list = Arrays.asList("USA", "FRANCE", "GERMANY", "ITALY", "CANADA");
        String res = list.stream().map(x -> x.toLowerCase()).collect(Collectors.joining("#"));
        System.out.println(res);
    }
    
  • 实现二:

    public class LambdaTest {
        public static void main(String[] args) {
            List numbers = Arrays.asList(1, 2, 3, 4, 5);
            filter1(numbers, x -> (int) x % 2 == 0);  // 2  4
    List words = Arrays.asList("a", "ab", "abc", "abcd", "abcde");
            filter2(words, x -> ((String) x).length() > 2);  //abc  abcd  abcde
        }
        public static void filter1(List list, Predicate condition) {
            list.forEach(x -> {
                if (condition.test(x)) {
                    System.out.print(x + " ");
                }
            });
        }
        public static void filter2(List list, Predicate condition) { //更佳的方式
            list.stream().filter(x -> condition.test(x)).forEach(x -> {
                System.out.print(x + " ");
            });
        }
    }
    
  • 实现三:

    public static void main(String[] args) throws IOException {
    	Dept accounting = new Dept((byte)10, "ACCOUNTING","NewYork");
    	Dept research = new Dept((byte)10, "RESEARCH","Dallas");
    	Dept sales = new Dept((byte)10, "SALES","Chicago");
    	Dept operations = new Dept((byte)10, "OPERATIONS","Boston");
    	List list = new ArrayList();
    	list.add(accounting);
    	list.add(research);
    	list.add(sales);
    	list.add(operations);
    	
    	List empList = list.stream().filter(item->item.getDname().contains("E"))
    		.map(item->{
    			Emp emp = new Emp();
    			emp.setDeptno(item.getDeptno());
    			return emp;
    		}).collect(Collectors.toList());	
    	empList.forEach(System.out::println); 
    }
    
  • 实现四:

    public static void main(String[] args) throws IOException {
    	Dept accounting = new Dept((byte)10, "ACCOUNTING","NewYork");
    	Dept research = new Dept((byte)20, "RESEARCH","Dallas");
    	Dept sales = new Dept((byte)30, "SALES","Chicago");
    	Dept operations = new Dept((byte)40, "OPERATIONS","Boston");
    	
    	Map map = new HashMap();
    	map.put(10, accounting);
    	map.put(20, research);
    	map.put(30, sales);
    	map.put(40, operations);
    	
    	List empList = map.entrySet().stream().map(item->{
    		Dept temp = item.getValue();
    		temp.setDname(temp.getDname().toLowerCase());
    		return temp;
    	}).collect(Collectors.toList());
    	empList.forEach(System.out::println);
    }
    
示例8:对List中的元素进行聚合/规约:reduce
public static void main(String[] args) {
    List list = Arrays.asList(10,20,30,40,50);
    Integer res = list.stream().reduce((sum, item) -> sum + item).get();
    System.out.println(res);
}
示例9:
    public static void main(String[] args) {
        List list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        Stream stream = list.stream();
//        stream.reduce(new BinaryOperator() {
//            @Override
//            public Integer apply(Integer a, Integer b) {
//                return a+b;
//            }
//        });
        Optional optional = stream.reduce((a, b) -> a + b);
        Integer integer = optional.get();
        System.out.println(integer);
    }
示例10:求List的最大值、最小值、平均值
public static void main(String[] args) {
    List list = Arrays.asList(3, 5, 29, 7,17, 2, 19);
    IntSummaryStatistics stats = list.stream().mapToInt((x) -> x).summaryStatistics();
    System.out.println("最大值:" + stats.getMax());
    System.out.println("最小值:" + stats.getMin());
    System.out.println("和:" + stats.getSum());
    System.out.println("平均值:" + stats.getAverage());
}
示例11:遍历Map
public static void main(String[] args) {
    Map map =new HashMap();
    map.put("zhangsan",17);
    map.put("lisi",18);
    map.put("wanger",16);
    map.put("mazi",19);
    map.forEach((k,v)->System.out.println(k+" : "+v));
}
示例12:防止集合中的元素为null。filter(Objects::nonNull)
public static void main(String[] args) throws IOException {
	Dept accounting = new Dept((byte) 10, "ACCOUNTING", "NewYork");
	Dept research = new Dept((byte) 20, "RESEARCH", "Dallas");
	Dept sales = new Dept((byte) 30, "SALES", "Chicago");
	Dept operations = new Dept((byte) 40, "OPERATIONS", "Boston");

	List list = new ArrayList();
	list.add(accounting);
	list.add(research);
	list.add(sales);
	list.add(null);
	list.add(operations);

	Optional.ofNullable(list).orElse(Collections.emptyList())  //集合null过滤
		.stream().filter(Objects::nonNull).forEach(item->{ //集合元素null过滤
			System.out.println(item.getDname());
	});
}
示例13:
public static void main(String[] args) throws IOException {
	Dept accounting = new Dept((byte) 10, "ACCOUNTING", "NewYork");
	Dept research = new Dept((byte) 20, "RESEARCH", "Dallas");
	Dept sales = new Dept((byte) 30, "SALES", "Chicago");
	Dept operations = new Dept((byte) 40, "OPERATIONS", "Boston");

	Map map = new HashMap();
	map.put(10, accounting);
	map.put(20, research);
	map.put(30, sales);
	map.put(null, operations);
	
map.keySet().stream().filter(Objects::nonNull)
			.forEach(System.out::println);
}
示例14:转换数组为List
  • 使用java.util.Arrays工具类中的asList()方法(这个不是Java8中新增的内容):

    String[] arrays = {"a", "b", "c"};
    List listStrings = Arrays.asList(arrays);
    
  • 使用Stream中的Collector收集器,代码:

    String[] arrays = {"a", "b", "c"};
    List list1 = Stream.of(arrays).collect(Collectors.toList());
    System.out.println(list1);  //[a, b, c]
    List list2 = Arrays.stream(arrays).collect(Collectors.toList());
    System.out.println(list2); //[a, b, c]
    
示例15:转换List为数组
  • 使用Stream:

    String[] ss = listStrings.stream().toArray(String[]::new);
    
  • 使用List中的toArray()方法

    String[] sss = listStrings.toArray(new String[listStrings.size()]);
    
示例16:将集合改成数组
public static void main(String[] args) {
    String[] array = List.of("aa", "bb").toArray(String[]::new);
    for (String item : array) 
        System.out.println(item);
}
将对象列表中的部分属性转换为Map
public static void main(String[] args) {
    List depts = new ArrayList();
    depts.add(new Dept(10, "ACCOUNTING", "NEWYORK"));
    depts.add(new Dept(20, "RESEARCH", "DALLAS"));
    depts.add(new Dept(30, "SALES", "CHICAGO"));
    depts.add(new Dept(40, "OPERATIONS", "BOSTON"));

    Map map = depts.stream().collect(Collectors.toMap(Dept::getDeptno, Dept::getDname));
    map.forEach((k,v)-> System.out.println(k+" "+v));
}
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0477s