Articles of java 8

Removendo o Java 8 JDK do Mac

Então, instalei o beta do JDK 8 há algum tempo para ver alguns dos exemplos. Eu pensei com certeza até agora, é fácil mudar entre as versões. Fazendo algum desenvolvimento do Play com o IntelliJ. Por alguma razão, o IntelliJ está compilando com 8, embora: Eu tenho o compilador definido em Preferências para usar 1.6 […]

Lambda esta referência em java

Eu quero converter uma anonymous class para uma lambda expression . Mas essa class anônima eu uso a palavra this chave this . Por exemplo, escrevi este simples padrão Observer/Observable : import java.util.ArrayList; import java.util.Collection; public static class Observable { private final Collection notifiables = new ArrayList(); public Observable() { } public void addObserver(Observer notifiable) […]

Não é possível obter o LocalDateTime do TemporalAccessor ao analisar o LocalDateTime (Java 8)

Eu estou simplesmente tentando converter uma string de data em um object DateTime no Java 8. Ao executar as seguintes linhas: DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyyMMdd”); LocalDateTime dt = LocalDateTime.parse(“20140218”, formatter); Estou tendo o erro a seguir: Exception in thread “main” java.time.format.DateTimeParseException: Text ‘20140218’ could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved […]

Por que este stream java é operado duas vezes?

A API do Java 8 diz: A transmissão da origem do pipeline não começa até que a operação do terminal do pipeline seja executada. Então, por que o seguinte código lança: java.lang.IllegalStateException: stream já foi operado ou fechado Stream stream = Stream.of(1,2,3); stream.filter( x-> x>1 ); stream.filter( x-> x>2 ).forEach(System.out::print); A primeira operação de filtragem […]

_ (sublinhado) é uma palavra reservada

Acabei de replace s na seguinte expressão lambda por _ : s -> Integer.parseInt(s) Compilador do Eclipse diz: ‘_’ não deve ser usado como um identificador, pois é uma palavra-chave reservada do nível de origem 1.8 on. Não encontrei nenhuma explicação na Estrutura / Palavras-chave Lexical do JLS §3.9 .

Correntes paralelas, coletores e segurança de roscas

Veja o exemplo simples abaixo que conta o número de ocorrências de cada palavra em uma lista: Stream words = Stream.of(“a”, “b”, “a”, “c”); Map wordsCount = words.collect(toMap(s -> s, s -> 1, (i, j) -> i + j)); No final, wordsCount é {a=2, b=1, c=1} . Mas meu stream é muito grande e quero […]

Formatar instantâneo para string

Eu estou tentando formatar um instantâneo para uma String usando o novo java 8 time-api e um padrão: Instant instant = …; String out = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”).format(instant); Usando o código acima, recebo uma exceção que reclama de um campo não suportado: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra at java.time.Instant.getLong(Instant.java:608) at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298) …

Como obter o MethodInfo de uma referência de método do Java 8?

Por favor, dê uma olhada no seguinte código: Method methodInfo = MyClass.class.getMethod(“myMethod”); Isso funciona, mas o nome do método é passado como uma string, então isso será compilado mesmo que myMethod não exista. Por outro lado, o Java 8 introduz um recurso de referência de método. É verificado em tempo de compilation. É possível usar […]

Java 8 Streams: vários filtros vs. condição complexa

Às vezes você quer filtrar um Stream com mais de uma condição: myList.stream().filter(x -> x.size() > 10).filter(x -> x.isCool()) … ou você poderia fazer o mesmo com uma condição complexa e um único filter : myList.stream().filter(x -> x.size() > 10 && x -> x.isCool()) … Meu palpite é que a segunda abordagem tem melhores características […]

Expressão Lambda e método genérico

Suponha que eu tenha uma interface genérica: interface MyComparable<T extends Comparable> { public int compare(T obj1, T obj2); } E um sort método: public static <T extends Comparable> void sort(List list, MyComparable comp) { // sort the list } Eu posso invocar esse método e passar uma expressão lambda como argumento: List list = Arrays.asList(“a”, […]