java8笔记二

package com.arithmetic;

import java.util.*;
import java.util.function.BinaryOperator;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static org.junit.Assert.assertEquals;

/**
 * @author nidayu
 * @Description:
 * @date 2015/10/15
 */
public class Java8 {
    public static void main(String[] args){
        List<String> collected = Stream.of("a", "b", "c").collect(Collectors.toList());
        //断言
        assertEquals(Arrays.asList("a", "b", "c"), collected);

        List<String> collected2 = Stream.of("a", "b", "hello")
                .map(string -> string.substring(0, 1).toUpperCase() + string.substring(1, string.length()))
                .collect(Collectors.toList());
        assertEquals(Arrays.asList("A", "B", "Hello"), collected2);

        List<String> beginWithNumbers = Stream.of("a", "1abc", "abc1")
                .filter(value -> Character.isDigit(value.charAt(0)))
                .collect(Collectors.toList());
        assertEquals(Arrays.asList("1abc"), beginWithNumbers);

        List<Integer> together = Stream.of(Arrays.asList(1, 2), Arrays.asList(3, 4))
                .flatMap(numbers -> numbers.stream())
                .collect(Collectors.toList());
        assertEquals(Arrays.asList(1, 2, 3, 4), together);

        //按照类的属性,求出最小的一个类!
        List<Track> tracks = Arrays.asList(
                new Track("ni", 17),
                new Track("da", 20),
                new Track("yu", 25),
                new Track("zhangyu", 22),
                new Track("da", 22)
        );
        Track minLengthTrack = tracks.stream()
                .min(Comparator.comparing(track -> track.getLength()))
                .get();
        System.out.println(minLengthTrack.getLength() +" "+ minLengthTrack.getNeme());
        assertEquals(tracks.get(0), minLengthTrack);

        //排序输出
        tracks.stream()
                .sorted(Comparator.comparing(track -> track.getLength()))
                .forEach(track1 -> System.out.println(track1.getNeme()));

        //对象转换
        IntSummaryStatistics intSummaryStatistics = tracks.stream()
                .mapToInt(track -> track.getLength()) //转换成IntStream对象
                .summaryStatistics();
        System.out.println(String.format("min: %d \nmax: %d \nave: %f \nsum: %d",
                intSummaryStatistics.getMin(),
                intSummaryStatistics.getMax(),
                intSummaryStatistics.getAverage(),
                intSummaryStatistics.getSum()));

        //求和
        BinaryOperator<Integer> accumulator = (x, y) -> x + y;
        int count = Stream.of(1, 2, 3)
                .reduce(0, accumulator);
        assertEquals(6, count);

        //测试方法
        Java8 java8 = new Java8();
        //根据人名分组
        Map<String, List<Track>> map = java8.groupByTrackName(tracks.stream());
        for (Map.Entry<String, List<Track>> entry: map.entrySet()){
            System.out.println(entry.getKey() +" "+ entry.getValue().size());
        }
        //测试方法
        java8.test(() -> "test info ...");
    }

    public void test(Supplier<String> message){
        if (true){
            System.out.println(message.get());
        }
    }

    public Map<String, List<Track>> groupByTrackName(Stream<Track> trackStream){
        return trackStream.collect(Collectors.groupingBy(track -> track.getNeme()));
    }
}

class Track{
    String neme;
    int length;

    public Track(String neme, int length) {
        this.neme = neme;
        this.length = length;
    }

    public String getNeme() {
        return neme;
    }

    public void setNeme(String neme) {
        this.neme = neme;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值