Articles of java 8

Por que a inferência de tipos genéricos do Java 8 seleciona essa sobrecarga?

Considere o seguinte programa: public class GenericTypeInference { public static void main(String[] args) { print(new SillyGenericWrapper().get()); } private static void print(Object object) { System.out.println(“Object”); } private static void print(String string) { System.out.println(“String”); } public static class SillyGenericWrapper { public T get() { return null; } } } Imprime “String” no Java 8 e “Object” no […]

Chamada ConcurrentHashMap.computeIfAbsent () Recursiva nunca termina. Bug ou “recurso”?

Algum tempo atrás, eu escrevi sobre uma maneira funcional do Java 8 de calcular números de fibonacci recursivamente , com um cache ConcurrentHashMap e o novo e útil método computeIfAbsent() : import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class Test { static Map cache = new ConcurrentHashMap(); public static void main(String[] args) { System.out.println( “f(” + 8 […]

Opcional orElse Opcional em Java

Eu tenho trabalhado com o novo tipo Optional no Java 8 , e eu me deparei com o que parece ser uma operação comum que não é suportada funcionalmente: um “orElseOptional” Considere o seguinte padrão: Optional resultFromServiceA = serviceA(args); if (resultFromServiceA.isPresent) return result; else { Optional resultFromServiceB = serviceB(args); if (resultFromServiceB.isPresent) return resultFromServiceB; else return […]

instalando o JDK8 no Windows XP – erro advapi32.dll

Eu baixei o JDK8 build b121 e ao tentar instalar estou recebendo o seguinte erro: o ponto de input do procedimento RegDeleteKeyExA não pôde ser localizado na biblioteca de vínculo dynamic ADVAPI32.dll O sistema operacional é o Windows XP, versão 2002 Service Pack 3, 32 bits.

Adicionando BigDecimals usando Streams

Eu tenho uma coleção de BigDecimals (neste exemplo, um LinkedList ) que gostaria de adicionar juntos. É possível usar streams para isso? Eu notei que a class Stream tem vários methods Stream::mapToInt Stream::mapToDouble Stream::mapToLong Cada um dos quais tem um método sum() conveniente. Mas, como sabemos, float e aritmética double é quase sempre uma má […]

Como sumr uma lista de inteiros com streams java?

Eu quero resumir uma lista de inteiros. Funciona da seguinte maneira, mas a syntax não parece correta. O código poderia ser otimizado? Map integers; integers.values().stream().mapToInt(i -> i).sum();

Por que o Iterable não fornece os methods stream () e parallelStream ()?

Eu estou querendo saber por que a interface Iterable não fornece os methods stream() e parallelStream() . Considere a seguinte class: public class Hand implements Iterable { private final List list = new ArrayList(); private final int capacity; //… @Override public Iterator iterator() { return list.iterator(); } } É uma implementação de uma mão, como […]

JDK 8 – “O tipo java.util.Map $ Entry não pode ser resolvido”

Estou tentando usar um HashMap, mas recebendo o erro: “O tipo java.util.Map $ Entry não pode ser resolvido. É indiretamente referenciado a partir dos arquivos .class necessários” Eu estou usando o JDK 8 junto com o Eclipse. Alguém sabe porque? Meu código import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Map; import java.util.HashMap; public class Analyser […]

Lambda ‘regra de compatibilidade de void especial’ – expressão de instrução

Estou lendo o Java 8 em ação. Na seção 3.5.2 há um parágrafo sobre ‘regra de compatibilidade de void’: Se um lambda tem uma expressão de instrução como seu corpo, ele é compatível com um descritor de function que retorna void (desde que a lista de parâmetros seja compatível também). Por exemplo, as duas linhas […]

Referência do Método de Instância e parameters do Lambda

Estou tendo problemas para entender a syntax de uma referência de método, onde há dois parâmetros b , e a referência é para um método de a em b . Por exemplo, eu entendo como Arrays.sort(personArray, comparators::compareByName); é equivalente a Arrays.sort(personArray, (o1, o2) -> comparators.compareByName(o1, o2)); porque nesse caso os parâmetros lambda correspondem aos parâmetros […]