天道酬勤,学无止境

java-8

Set sqldialect to logback db appender programmatically

问题 我正在编写用于创建 DBAppender 以使用我的连接池的数据源的源代码。 现在,当我启动 DBAppender 时,我收到错误消息“如果 JDBC 驱动程序不支持 getGeneratedKeys 方法且没有特定的 SQL 方言,则 DBAppender 无法运行”。 所以我想将 sqlDialect 添加到我的实现中,但找不到这样做的方法。 将 appender 添加到 logger 的代码如下所示: LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); DataSourceConnectionSource source = new DataSourceConnectionSource(); source.setDataSource(Database.getInstance().getDatasource()); DBAppender dbAppender = new DBAppender(); dbAppender.setName("db"); dbAppender.setConnectionSource(source); dbAppender.setContext(lc); dbAppender.start(); Logger logger = (Logger)

2022-07-11 09:59:29    分类:技术分享    java-8   logback

Prime number in java 8

问题 import static java.util.stream.Collectors.toList; import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Stream1 { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 20); // Prime number System.out.println(numbers.stream() .filter(Stream1::isPrime) .collect(toList())); } public static boolean isPrime(int number) { for (int i = 2; i <= number / 2; i++) { if (number % i == 0) { return false; } } return true; } } 回答1 IntStream 可用于生成整数流 public static boolean isPrime(int number) { return !IntStream

2022-05-17 03:02:12    分类:技术分享    java   java-8   primes

How to make a Predicate from a custom list of Predicates in Java?

问题 public class Tester { private static ArrayList<Predicate<String>> testerList; //some Predicates of type String here... public static void addPredicate(Predicate<String> newPredicate) { if (testerList == null) {testerList = new ArrayList<Predicate<String>>();} testerList.add(newPredicate); } public static Predicate<String> customTesters () { return s -> testerList.stream().allMatch(t -> t.test(s)); } } 回答1 你可以有一个静态方法来接收许多谓词并返回你想要的谓词: public static <T> Predicate<T> and(Predicate<T>... predicates) { // TODO Handle case when argument is null or empty or has only one element return s -> Arrays

2022-05-17 02:32:09    分类:技术分享    java   lambda   java-8   java-stream   predicate

Get epoch millis from local date and timezone

问题 我有两个字符串变量: String localDateTime = "19700101000000"; String timeZone = "+0000"; 我如何使用 Java 8 从他们那里获得 epoch millis?我已经尝试过这种方式: private static Long getBeginConnectionTime( String dateWithTimeZone = localDateTime + timeZone ; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssXXXXX"); OffsetDateTime offsetDateTime = OffsetDateTime.parse(dateWithTimeZone, formatter); return offsetDateTime.toInstant().toEpochMilli(); ) 但是这段代码抛出异常: java.time.format.DateTimeParseException: Text '19700101000000+0000' could not be parsed at index 14 at java.time.format.DateTimeFormatter

2022-05-17 00:14:04    分类:技术分享    java   java-8   java-time

Java 8 stream's toArray and size parameter

问题 我想知道 stream().toArray[x -> new Integer[x]] 如何知道数组的大小? 我写了一个片段,在其中我创建了一个大小为 4 的整数列表并过滤了值,它创建了一个过滤流长度的数组,我在流上看不到任何方法来获取流的大小。 List<Integer> intList = new ArrayList<Integer>(); intList.add(1); intList.add(2); intList.add(3); intList.add(4); Integer[] array = intList.stream() .filter(x -> x > 2) .toArray(x -> { System.out.println("x --> " + x); return new Integer[x]; }); System.out.println("array length: " + array.length); 上述代码的输出: x --> 2 array length: 2 最初,片段就像 Integer[] array = intList.stream() .filter(x -> x > 2) .toArray(x -> new Integer[x]); 只是为了了解它传递的 x 的值,我必须将其更改为在 lambda 中打印 x 回答1 回答2

2022-05-16 03:28:39    分类:技术分享    java   lambda   java-8   java-stream

Convert OptionalDouble to Optional <java.lang.Double>

问题 我有一个构建列表的方法,我希望它将列表的平均值作为可选值返回。 但是,当我使用 Java 8 计算平均值时,我总是将返回值作为 OptionalDouble。 我如何转换 OptionalDouble to Optional<Double>? 以下是我的平均计算代码: private static Optional<Double> averageListValue() { // Build list List<Double> testList = new ArrayList<>(); testList.add(...); ... ... return testList.stream().mapToDouble(value -> value).average(); } 谢谢。 回答1 private static Optional<Double> convert(OptionalDouble od) { return od.isPresent() ? Optional.of(od.getAsDouble()) : Optional.empty(); } 回答2 @Andremoniy 的答案略有不同是跳过DoubleStream并使用averagingDouble()收集器: if (testList.isEmpty()) { return Optional.empty();

2022-05-16 03:19:20    分类:技术分享    java   java-8   average   optional

Java 8 Streams map API - interpretation of method reference

问题 示例代码: class Outer { public Integer i; Outer(Integer i) { this.i = i; } public int getVal() { return i; } } class MyClass { public Integer f(Outer o) { return o.getVal();}; public void main() { MyClass g = new MyClass(); List<Integer> l1 = Arrays.asList(new Outer(2)).stream().map(g::f).collect(Collectors.toList()); List<Integer> l2 = Arrays.asList(new Outer(2)).stream().map(Outer::getVal).collect(Collectors.toList()); } } 使用任一方法参考 Outer::instanceMethod不带参数,基本上是一个Supplier<T>功能接口。 [1] MyClass::instanceMethod接受类型为Outer的参数并且是Function<T,R>功能接口。 [1] 已验证。 那么map函数如何知道将选项(1)中的函数应用于流的对象,但将流对象传递给选项(2

2022-05-15 20:03:25    分类:技术分享    java   java-8   java-stream

Nested forEach in Java 8

问题 我想根据 Java 8 的流重写这段代码 for (Medium medium : sortierteMedien) { System.out.println("Fuenf aehnlichste Medien fuer " + medium.getClass() + " mit dem Titel " + medium.getTitel() + ":\n"); for (Medium medium1 : bibliothek.medienSim(medium)) { System.out.println(medium1.toString()); } System.out.println(); } 这里的困难在于,在每个内部for循环之前和之后都有一个print语句。 是否可以用流重写它? 回答1 循环中的命令式语句不是 Stream API 使用的典型任务。 你仍然可以在没有 Stream API 的情况下使用 lambda 表达式来做到这一点,即 sortierteMedien.forEach(medium -> { System.out.println("Fuenf aehnlichste Medien fuer " +medium.getClass()+" mit dem Titel "+medium.getTitel()+":\n"); bibliothek

2022-05-15 16:05:08    分类:技术分享    java   lambda   java-8   java-stream

Can you Aggregate LocalDateTime in MongoDb with Morphia

问题 我正在使用 Morphia 访问我的 mongoDB。 我的一个收藏有一个 lastUpdatedTimestamp 声明为 Java8 LocalDateTime。 我正在使用这个java代码: - Iterator<CountResult> iterator = datastore.createAggregation(MyClass.class).group(Arrays.asList(Group.grouping("$year", "timestamp")), Group.grouping("count", new Accumulator("$sum", 1))).aggregate(CountResult.class); 我希望根据 $year $month $day $hour 汇总我的数据,但是只需尝试 $hour 或 $year 我得到这个例外 com.mongodb.MongoCommandException: Command failed with error 16006: 'can't convert from BSON type EOO to Date' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "can't convert from BSON

2022-05-15 12:59:17    分类:技术分享    mongodb   java-8   morphia

Java 8 avoiding null pointer checks using Optional

问题 是否可以编写这样的内容并避免检查元素是否为空且集合是否为空: response.getBody() .getRequestInformation() .getRequestParameters().get(0) .getProductInstances().get(0) .getResultParameters() 我发现了类似的东西 http://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/ 基本上,我想要实现的是避免具有多个检查天气对象的语句为空或层次结构中的集合为空。 我在上面的帖子中读到,这可以通过可选的“在后台自动处理空检查”来实现。 如果已经有一些解决方案,抱歉重复,请参考。 回答1 如果你想链接Optional ,你可以使用它的 map(Function<? super T,? extends U> mapper) 方法来调用 mapper 函数,只有当它不为null并使用flatMap(Stream::findFirst)来获取第一个您的Collection元素如下: Optional<List<ResultParameterClass>> parameters = Optional.ofNullable(response) .map(ResponseClass::getBody) .map

2022-05-15 11:48:13    分类:技术分享    java   java-8   optional   null-check