Java 8 要点

2018-12-11  本文已影响0人  单纯小码农

Java 8 要点

  1. new Date/Time API
  2. Stream
  3. Lambda Expressions
  4. Method references
  5. Optional
  6. Default Method

new Date/Time API - java.time

    @Test
    public void format() throws Exception {
        DateTimeFormatter dateFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
        Assert.assertEquals("2011-11-11", dateFormatter.format(LocalDate.of(2011, 11, 11)));
    }
        @Test
        public void parse() throws Exception {
            DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            LocalDate day = LocalDate.parse("1900-01-01", dateFormatter);
            Assert.assertEquals(LocalDate.of(1900, 1, 1), day);
        }
    @SpringBootApplication
    public class WebMain extends WebMvcConfigurerAdapter {
    
        @Override
        public void addFormatters(FormatterRegistry registry) {
            DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
            registrar.setDateFormatter(DateTimeFormatter.ISO_DATE);
            registrar.setTimeFormatter(DateTimeFormatter.ISO_TIME);
            registrar.setDateTimeFormatter(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            registrar.registerFormatters(registry);
        }
    
    }
        @Bean
        public LocalContainerEntityManagerFactoryBean catalogEntityManagerFactory(
                @Qualifier(CatalogRepositoryConfig.UNIT_NAME) DataSource catalogDataSource,
                EntityManagerFactoryBuilder builder, JpaProperties jpaProperties) {
            return builder.dataSource(catalogDataSource)
                    .packages(Server.class, Jsr310JpaConverters.class)
                    .persistenceUnit(UNIT_NAME)
                    .properties(jpaProperties.getHibernateProperties(catalogDataSource))
                    .build();
        }
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false
            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jsr310</artifactId>
            </dependency>
        @Bean
        public SimpleModule jsr310JacksonModule() {
            SimpleModule jsr310Module = new SimpleModule();
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            jsr310Module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter));
            jsr310Module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
            return jsr310Module;
        }
        @Test
        public void plusOrMinus() throws Exception {
            LocalDateTime payTime = LocalDateTime.of(2015, 10, 10, 19, 0);
            Assert.assertEquals(LocalDateTime.of(2015, 10, 30, 19, 0), payTime.plusDays(20));
            Assert.assertEquals(LocalDateTime.of(2015, 10, 11, 5, 0), payTime.plusHours(10));
            Assert.assertEquals(LocalDateTime.of(2015, 9, 30, 19, 0), payTime.minusDays(10));
        }

stream

consumer

使用场景

  1. groupBy
  2. partition
  3. sum
  4. map
  5. filter

注意

  1. stream只能consume一次
  2. Iterable没有stream
  3. stream代表的是一些function的整合,并不是一个数据结构
  4. parallel stream 慎用
  5. stream的每个function最好是没有副作用的

Lambda Expressions

Method References


Optional

  1. Optional
  2. OptionalInt, OptionalLong, OptionalDouble

参考资料

  1. https://leanpub.com/whatsnewinjava8/read
  2. https://github.com/adamd/hellojava8
  3. https://github.com/katoquro/jdk8-lambda-samples
  4. https://octoperf.com/blog/2015/08/24/one-year-with-java-8-in-production/
  5. http://zeroturnaround.com/rebellabs/java-parallel-streams-are-bad-for-your-health/
  6. http://zeroturnaround.com/rebellabs/how-your-addiction-to-java-8-default-methods-may-make-pandas-sad-and-your-teammates-angry/
  7. http://zeroturnaround.com/rebellabs/java-8-explained-default-methods/
  8. http://blog.jooq.org/2014/06/13/java-8-friday-10-subtle-mistakes-when-using-the-streams-api/
  9. http://blog.jooq.org/2014/04/04/java-8-friday-the-dark-side-of-java-8/
  10. http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/
  11. http://blog.takipi.com/new-parallelism-apis-in-java-8-behind-the-glitz-and-glamour/
  12. http://blog.takipi.com/the-dark-side-of-lambda-expressions-in-java-8/
  13. https://robinst.github.io/guava-java8-presentation
上一篇 下一篇

猜你喜欢

热点阅读