java8练习

  1. 流处理
package stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListUtil {

	
	public static List<Integer> getTenOfNumberList() {
		List<Integer> list = new ArrayList<>();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(5);
		list.add(7);
		list.add(4);
		list.add(6);
		list.add(9);
		list.add(8);
		list.add(0);
		
		return list;
		
	}
	
	public static List<Integer> getRepeatNumberList() {
		List<Integer> list = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
		return list;
	}
}

package stream;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

import static java.util.stream.Collectors.toList;

import java.util.Comparator;

public class Distinct {
	public static void main(String [] args) {
		List<Integer> list = ListUtil.getRepeatNumberList();
		list = list.stream()
		.filter((num) -> num % 2 == 0)
		.distinct()
		.collect(toList());
		System.out.println(list);
		// 取第一个元素
		list.stream().limit(1).forEach(System.out :: println);
		// 跳过第一个元素
		list.stream().skip(1).forEach(System.out :: println);
		
		// 检查语句(谓词)是否全部匹配流中所有的元素
		boolean allMatch = list.stream().allMatch((i) -> i % 2 == 0);
		System.out.println(allMatch);
		
		// 检查语句(谓词)是否至少匹配到流中的一个元素
		boolean anyMath = list.stream().anyMatch((i) -> i % 2 == 0);
		System.out.println(anyMath);
		
		// 获取流中第一个元素,并且封装到空值判断工具类中,进行非空校验
		Optional<Integer>  oneNum = list.stream().map((x) -> x * x * x ).findFirst();
		// 判断是否为空
		boolean isNull = oneNum.isPresent();
		System.out.println("is not null : " + isNull);
		System.out.println(oneNum.get());
		// 规约求和,也可以对对象中某一属性规约,例如人的年龄  不过需要map或者flatmap做一下元素的提取映射
		// 也可以写成list.stream().reduce(0,(a,b) -> a + b)  0 为规约的初始值    这就是传说中的 map reduce
		Integer intValue = list.stream().reduce(0,Integer :: sum);
		System.out.println(intValue);
		// 倒排
		Comparator<Integer> comparator = (x, y) -> x.compareTo(y);
		list.stream().sorted(comparator.reversed()).forEach(System.out::println);
	}
}

package stream;

import java.util.List;
import static java.util.stream.Collectors.toList;

public class Fillter {
	public static void main(String [] args) {
		List<Integer> list = ListUtil.getTenOfNumberList();
		list = list.stream()
		.filter((i) -> i > 5)
		.collect(toList());
		System.out.println(list);
	}
}

package stream2;

import java.io.Serializable;

/**
 * 
 * @author ShiXiaoQiang
 *
 */
public class People implements Serializable{
	
	private static final long serialVersionUID = 1L;

	/**
	 * 年龄
	 */
	private int age;
	
	/**
	 * 姓名
	 */
	private String name;
	
	/**
	 * 性别  true 男  false 女
	 */
	private boolean sex;
	
	public People() {
		
	}
	
	public People (String name, int age, boolean sex) {
		this.age = age;
		this.name = name;
		this.sex = sex;
	}
	
	public int getAge() {
		return age;
	}
	public People setAge(int age) {
		this.age = age;
		return this;
	}
	public String getName() {
		return name;
	}
	public People setName(String name) {
		this.name = name;
		return this;
	}
	public boolean isSex() {
		return sex;
	}
	public People setSex(boolean sex) {
		this.sex = sex;
		return this;
	}
	
	

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		People other = (People) obj;
		if (age != other.age)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "People [age=" + age + ", name=" + name + ", sex=" + sex + "]";
	}
}
package lambda;

import com.google.common.collect.Lists;
import org.junit.Before;
import org.junit.Test;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class DemoTest {

    private List<People> peopleList = Lists.newArrayList();

    @Before
    public void before() {
        People people = new People();
        people.setAge(10);
        people.setName("xiaoming");
        People people1 = new People();
        people1.setAge(15);
        people1.setName("xiaowang");
        People people2 = new People();
        people2.setName("xiaowang");
        people2.setAge(14);
        People people3 = new People();
        people3.setAge(11);
        people3.setName("xiaoming");
        peopleList.add(people);
        peopleList.add(people1);
        peopleList.add(people2);
        peopleList.add(people3);
    }

    @Test
    public void test() {
        // mergeFunction 重写mergeFunction方法,主要目的是保证在key重复的情况下不抛错,且选择最先放入map中的数据
        Map<String, People> map = peopleList.stream()
                .collect(Collectors.toMap(People :: getName, p -> p, (oldP, newP) -> oldP));

        System.out.println(map);
    }
}

package stream2;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.*;

/**
 * 
 * @author ShiXiaoQiang
 *
 */
public class CollectorDemo {
	public static void main(String[] args) {
		// 收集器进行规约处理
		List<People> peoples = Arrays.asList(new People("小明", 10, true),
				new People("小王", 10, true), new People("小强", 18, true),
				new People("璐璐", 18, false), new People("张三", 24, true),
				new People("李四", 24, true), new People("小红", 23, false),
				new People("小凯", 27, true), new People("王大妈", 65, false));
		// 1. 统计列表中总人数
		long count = peoples.stream().collect(Collectors.counting());
		peoples.stream().count();
		peoples.size();
		System.out.println(count + "人");
		// ----------------------------------------------
		
		// 2. 查找流中年龄最大的和最小的(只会取出最小/大值中一个)
		// 2.1创建比较器
		Comparator<People> peopleComparator
				= Comparator.comparingInt(People :: getAge);
		// 2.2 求值
		Optional<People> pMax = peoples.stream().collect(maxBy(peopleComparator));
		System.out.println(pMax.get());
		Optional<People> pMin = peoples.stream().collect(minBy(peopleComparator));
		System.out.println(pMin);
		// 也可以这么写
		System.out.println(peoples.stream().min(peopleComparator));
		
		// 3. 计算流中年龄总和
		int ageSum = peoples.stream().collect(summingInt(People :: getAge));
		System.out.println("年龄总和: " + ageSum);
		// 另一种求和方式
		ageSum = peoples.stream().map(People :: getAge).reduce(0, Integer :: sum);
		// 又一种写法
		ageSum = peoples.stream().collect(reducing(0, People :: getAge, Integer :: sum));
		System.out.println("年龄总和: " + ageSum);
		
		// 平均年龄
		double ageAvg = peoples.stream().collect(averagingInt(People :: getAge));
		System.out.println("平均年龄:" + ageAvg);
		
		// 4. 字符串连接
		// 将所有人的名字连接起来
		String nameJoin = peoples.stream().map(People :: getName).map((str) -> str.concat(",")).collect(joining());
		nameJoin = peoples.stream().map(People :: getName).collect(joining(","));
		System.out.println(nameJoin.substring(0, nameJoin.lastIndexOf(",")));
		
		// 5. 重点来了,分组
		// 按性别分组
		Map<Boolean, List<People>> peopleMap= peoples.stream().collect(groupingBy(People :: isSex));
		System.out.println(peopleMap);
		
		// 多级分组,性别,年龄
		Map<Boolean, Map<String, List<People>>> pGMap = peoples.stream().collect(
				groupingBy(People :: isSex,
							groupingBy((People p) -> {
												if ( p.getAge() < 30)
												{
													return "young";
												}
												else 
												{
													return "old";
												}
											}
									)
						)
				);
		
			System.out.println(pGMap);
			
			
			//groupingBy 中的第二个参数也可以传入其他收集器
			Map<Boolean, Long> peopleMapOfCount = peoples.stream()
					.collect(groupingBy(People :: isSex, counting()));
			System.out.println(peopleMapOfCount);
			
			// 5.1 分区
			Map<Boolean, List<People>> peopleInver = peoples.stream().collect(partitioningBy(People :: isSex));
			System.out.println(peopleInver);
			
	}
}

2、 时间

import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.temporal.TemporalAdjusters;

public class DurationAndPeriodDemo {
	public static void main(String [] args) {
		LocalDateTime ldtStart = LocalDateTime.of(2018, 1, 1, 1, 1, 1);
		LocalDateTime ldtEnd = LocalDateTime.of(2018, 1, 1, 10, 27, 1);
		Duration duration = Duration.between(ldtStart, ldtEnd);
		System.out.println(duration);
		LocalDate ldStart = LocalDate.of(2017, 12, 31);
		LocalDate ldEnd = LocalDate.of(2018, 1, 1);
		Period period = Period.between(ldStart, ldEnd);
		System.out.println(period);
		LocalDate date = LocalDate.of(2014, 3, 18);
		LocalDate ld = date.with(TemporalAdjusters.lastDayOfMonth());
		System.out.println(ld);
	}
}

import java.time.Instant;

/**
 * 机器的时间和日期格式
 * @author Administrator
 *
 */
public class InstantDemo {
	public static void main(String [] args) {
		Instant instant = Instant.ofEpochSecond(3);
		Instant instant1 = Instant.ofEpochSecond(3, 0);
		Instant instant2 = Instant.ofEpochSecond(2, 1_000_000_000);
		Instant instant3 = Instant.ofEpochSecond(4,-1_000_000_000);
		System.out.println(instant);
		System.out.println(instant1);
		System.out.println(instant2);
		System.out.println(instant3);
		
	}
}


public class LambdaDemo {
	public static void main(String [] args) {
		process(() -> System.out.println("hello java8 1"));
		process(() -> System.out.println("hello java8 2"));
		process(() -> System.out.println("hello java8 3"));
		Runnable r = () -> System.out.println("hello java8 4");
		process(r);
	}
	
	public static void process(Runnable r) {
		r.run();
	}
}

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.ChronoField;
/**
 * 常用(部分)java8时间api LocalDate的使用
 * @author Administrator
 *
 */
public class LocalDateDemo {
	public static void main(String [] args) {
		System.out.println("hello time!!!");
		System.out.println("你好2018");
		
		LocalDate localDate = LocalDate.of(2017, 12, 31);
		LocalDate localDateToStr = LocalDate.parse("2017-12-31");
		System.out.println("localDate:" + localDate);
		System.out.println("localDateToStr:" + localDateToStr);
		int year = localDate.getYear();
		Month month = localDate.getMonth();
		int monthVal = localDate.getMonthValue();
		int monthVal2 = month.getValue();
		int dayOfMonth = localDate.getDayOfMonth();
		int dayOfYear = localDate.getDayOfYear();
		DayOfWeek dayOfWeek = localDate.getDayOfWeek();
		/**
		 * 是否是润年
		 */
		boolean isLeap = localDate.isLeapYear();		
		System.out.println("是一周中的第几天:" + dayOfWeek.values().length);
		System.out.println("第几年:" + year);
		System.out.println("几月,英文表示:" + month);
		System.out.println("几月,数字表示:" + monthVal);
		System.out.println("几月,数字表示:" + monthVal2);
		System.out.println("月中的第几天:" + dayOfMonth);
		System.out.println("年中的第几天:" + dayOfYear);
		System.out.println("周中的第几天:英文表示:" + dayOfWeek);
		System.out.println("是否是闰年:" + isLeap);
		
		/**
		 * 使用TemporalField 读取LocalDate
		 * ChronoField  实现了 TemporalField接口
		 */
		int yearForTemp = localDate.get(ChronoField.YEAR); 
		int monthForTemp = localDate.get(ChronoField.MONTH_OF_YEAR);
		int day = localDate.get(ChronoField.DAY_OF_MONTH);
		 /**
		  * 返回一个long值,下面的例子是返回月中的第几天,长整型xx
		  */
		long xx = localDate.getLong(ChronoField.DAY_OF_MONTH);
		System.out.println("通过TemporalField获取年:" + yearForTemp);
		System.out.println("通过TemporalField获取月:" + monthForTemp);
		System.out.println("通过TemporalField获取月中的第几日:" + day);
		System.out.println("xx:" + xx);
		/**
		 * 获取当前时间
		 */
		LocalDate localDateNow = LocalDate.now();
		System.out.println("现在的时间是:" + localDate);
		
	}
}

import java.time.Clock;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.ChronoField;

public class LocalTimeDemo {
	public static void main(String [] args) {
		LocalTime localTime = LocalTime.of(23, 59, 59);
		LocalTime localTimeToStr = LocalTime.parse("23:59:59");
		System.out.println("localTime:" + localTime);
		System.out.println("localTimeToStr:" + localTimeToStr);
		
		int hour = localTime.getHour();
		int minute = localTime.getMinute();
		int second = localTime.getSecond();
		
		/**
		 * 使用TemporalField 读取LocalDate
		 * ChronoField  实现了 TemporalField接口
		 */
		int hourToTemp = localTime.get(ChronoField.HOUR_OF_DAY);
		int minuteToTemp = localTime.get(ChronoField.MINUTE_OF_HOUR);
		int secondToTemp = localTime.get(ChronoField.SECOND_OF_MINUTE);
		
		System.out.println(hour + ":" + minute + ":" + second);
		
		System.out.println("-----------------------");
		
		System.out.println(hourToTemp + ":" + minuteToTemp + ":" + secondToTemp);
		
		/**
		 * 获取当前时间,精确到毫秒00:00:38.444
		 */
		System.out.println(LocalTime.now());
		LocalTime time = LocalTime.now();
		LocalDateTime ldt = time.atDate(LocalDate.now());
		System.out.println("ldt:" + ldt);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值