Використовуйте цей тег для питань, специфічних для Java 8, це версія 8 (внутрішній номер 1.8) платформи Java, випущена 18 березня 2014 року. У більшості випадків слід також вказати тег Java.
Я намагаюся написати метод для друку різниці в часі між двома ZonedDateTime , щодо різниці між часовими поясами. Я знайшов кілька рішень, але всі вони були написані для роботи з LocalDateTime .
З java8 ми знаємо, що use ZoneId.default()може отримати системний за замовчуванням ZoneId, але як отримати за замовчуванням ZoneOffset? Я бачу, що a ZoneIdмає деякі "правила", і кожне правило має a ZoneOffset, це означає, що a ZoneIdможе мати більше одного ZoneOffset?
Чи є хороший спосіб додати нову вартість до існуючої Stream? Все, що я можу уявити, - це приблизно таке: public <T> Stream<T> addToStream(Stream<T> stream, T elem ) { List<T> result = stream.collect(Collectors.toList()); result.add(elem); return result.stream(); } Але я шукаю щось більш лаконічне, що я міг би використовувати в лямбда-вираженні без …
Читаючи цікаві статті, хлопці стверджують, що різниця між цими двома функціями: Обидві функції прагнуть додати елемент, якщо вказаний Ключ ще не присутній у Map. putIfAbsent додає елемент із заданим значенням, тоді як computeIfAbsent додає елемент зі значенням, обчисленим за допомогою ключа. http://www.buggybread.com/2014/10/java-8-difference-between-map.html І Ми бачили, що putIfAbsent усуває обов’язковий спосіб …
Наступний код компілюється як в Java 8, так і в 9, але поводиться по-різному. class Simple { static String sample = "\nEn un lugar\r\nde la Mancha\nde cuyo nombre\r\nno quiero acordarme"; public static void main(String args[]){ String[] chunks = sample.split("\\R\\R"); for (String chunk: chunks) { System.out.println("Chunk : "+chunk); } } } …
Скажімо, у мене є Перелік об’єктів, які були визначені за допомогою лямбда-виразів (закриття). Чи є спосіб їх перевірити, щоб їх можна було порівняти? Код, який мене найбільше цікавить, це List<Strategy> strategies = getStrategies(); Strategy a = (Strategy) this::a; if (strategies.contains(a)) { // ... Повний код import java.util.Arrays; import java.util.List; public …
Щоб допомогти зрозуміти, що таке монада, чи може хтось навести приклад використання Java? Чи можливі вони? Лямбда-вирази можливі за допомогою java, якщо ви завантажите JDK8, сумісний з лямбда-зв’язком, звідси http://jdk8.java.net/lambda/ Приклад лямбди з використанням цього JDK наведено нижче, чи може хтось надати порівняно просту монаду? public interface TransformService { int[] …
Ця програма чудово компілюється в Java 7 (або в Java 8 з -source 7), але не вдається скомпілювати з Java 8: interface Iface<T> {} class Impl implements Iface<Impl> {} class Acceptor<T extends Iface<T>> { public Acceptor(T obj) {} } public class Main { public static void main(String[] args) { Acceptor<?> …
Я намагаюся придумати більш стислий вираз для параметра функції "keyMapper" у наступному Collectors.toMap()виклику: List<Person> roster = ...; Map<String, Person> map = roster .stream() .collect( Collectors.toMap( new Function<Person, String>() { public String apply(Person p) { return p.getLast(); } }, Function.<Person>identity())); Здається, я мав би змогу вбудувати його за допомогою лямбда-виразу, але …
Я отримую наступний виняток під час спроби конвертувати java.util.Dateв java.time.LocalDate. java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: 2014-08-19T05:28:16.768Z of type java.time.Instant Код такий: public static Date getNearestQuarterStartDate(Date calculateFromDate){ int[] quaterStartMonths={1,4,7,10}; Date startDate=null; ZonedDateTime d=ZonedDateTime.from(calculateFromDate.toInstant()); int frmDateMonth=d.getMonth().getValue(); Чи є щось не так у використанні ZonedDateTimeкласу? Відповідно до документації, це повинно перетворити …
Досліджуючи невеликі дебати з використанням "" + nі Integer.toString(int)для перетворення цілочисеного примітиву у рядок, я написав цей мікровивідний знак JMH: @Fork(1) @OutputTimeUnit(TimeUnit.MILLISECONDS) @State(Scope.Benchmark) public class IntStr { protected int counter; @GenerateMicroBenchmark public String integerToString() { return Integer.toString(this.counter++); } @GenerateMicroBenchmark public String stringBuilder0() { return new StringBuilder().append(this.counter++).toString(); } @GenerateMicroBenchmark public String …
Потік не має last()методу: Stream<T> stream; T last = stream.last(); // No such method Який найелегантніший та / або найефективніший спосіб отримати останній елемент (або нульовий для порожнього потоку)?
Деякий час тому я писав у блозі про функціональний спосіб Java 8 для обчислення чисел Фібоначчі рекурсивно , з ConcurrentHashMapкешем та новим, корисним computeIfAbsent()методом: import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class Test { static Map<Integer, Integer> cache = new ConcurrentHashMap<>(); public static void main(String[] args) { System.out.println( "f(" + 8 + …
Будь ласка, подивіться на такий код: Method methodInfo = MyClass.class.getMethod("myMethod"); Це працює, але ім'я методу передається як рядок, тому це буде скомпільовано, навіть якщо myMethod не існує. З іншого боку, Java 8 вводить функцію посилання на метод. Це перевіряється під час компіляції. Можна скористатися цією функцією, щоб отримати інформацію про …