在我之前的问题 - 如何使用列表在地图中分组时过滤年龄我能够找到使用年龄组的名称List<User> users.现在我试图根据阈值从年龄中找到不同的用户组.我试过这个
List<User> userAboveThreshold = users.stream().filter(u -> u.getAge() > 21).collect(toList());
List<User> userBelowThreshold = users.stream().filter(u -> u.getAge() <= 21).collect(toList());
Run Code Online (Sandbox Code Playgroud)
这次它可以工作,我可以看到使用
userAboveThreshold.forEach(u -> System.out.println(u.getName() + " " + u.getAge()));
userBelowThreshold.forEach(u -> System.out.println(u.getName() + " " + u.getAge()));
Run Code Online (Sandbox Code Playgroud)
但我必须再次访问用户列表才能找到免费列表.这可以做得更简单吗?
我正在学习写一些lambda表示作为FunctionalInterface.所以,要添加我使用的两个整数:
BiFunction<Integer, Integer, Integer> biFunction = (a, b) -> a + b;
System.out.println(biFunction.apply(10, 60));
Run Code Online (Sandbox Code Playgroud)
给我输出70.但如果我这样写的话
BinaryOperator<Integer, Integer, Integer> binaryOperator = (a, b) -> a + b;
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说
错误的类型参数数量:3; 要求:1
不是BinaryOperator孩子BinaryFunction吗?我该如何改进?
通过java.lang.module我在类文档中阅读以下内容:
Run Code Online (Sandbox Code Playgroud)@implNote ... is used at VM startup and so deliberately avoids using lambda and stream usages in code paths used during startup.
使用lambda和流的原因是什么,以及它们可能产生的影响是什么?
插图有助于更好地理解,而不是在这里寻找意见.
类似我刚才的问题在这里,该用户我有对象是这些
new User("ayush","admin",23)
new User("ashish","guest",19)
new User("ashish","admin",20)
new User("garima","guest",29)
new User("garima","super",45)
new User("garima","guest",19)
Run Code Online (Sandbox Code Playgroud)
现在我试图让这些用户知道不同年龄段的名称.但是我需要在一个threshold年龄之上过滤它们.我可以使用这个趋势
Map<String, List<Integer>> userNameAndAgeTrend = users.stream().collect(Collectors.groupingBy(user-> user.getName(), Collectors.mapping(u-> u.getAge(), toList())));
Run Code Online (Sandbox Code Playgroud)
这给了我{ashish=[19, 20], garima=[29, 45, 19], ayush=[23]}.但是在我使用这种分组的情况下,我无法使用阈值正确过滤列表,例如21年.有人可以帮忙吗?
另外,使用.filter(user -> user.getAge() > 21)没有为ashish提供映射,这也是我想要存储的.我可以在我的机器上安装Java10并尝试建议的解决方案.
我有一个完美构建并运行在Java 8上的Hibernate 5项目.我尝试在JDK 9 ea build 171上测试它.由于它是一个庞大的项目并且有其他依赖项,我不得不将java.xml.bind模块添加到JVM配置中进行测试:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<argLine>--add-modules java.xml.bind</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
还有其他问题我可以解决,但如果使用聚合模块java.se.ee(如推荐):
<argLine>--add-modules java.se.ee</argLine>
Run Code Online (Sandbox Code Playgroud)
我有一个例外:
java.lang.NoClassDefFoundError: javax/transaction/SystemException
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at org.jboss.logging.Logger$1.run(Logger.java:2554)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2529)
Run Code Online (Sandbox Code Playgroud)
我甚至无法理解为什么会发生这种情况,因为JTA库(带有SystemException类)在测试运行时位于类路径中.
对于如何解决这个问题,有任何的建议吗?
我在NetBeans 8.2中的一个新的干净Maven项目中创建了这个测试:
import static org.junit.jupiter.api.Assertions.fail;
import org.junit.jupiter.api.Test;
public class JUnit501Test {
@Test
void firstTest() {
fail("epicly");
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行测试,日志显示
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running JUnit501Test
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
Run Code Online (Sandbox Code Playgroud)
我的pom.xml包含这个依赖项:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.0.1</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
什么可能导致JUnit 5忽略测试方法?
更新:我添加了surefire插件,这是完整的pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.timeshuttle</groupId>
<artifactId>Junit5Test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.0.1</version> …Run Code Online (Sandbox Code Playgroud) 我有一个具有名称,类型和年龄的User类,然后这些用户的一长串就是我的输入。List<User> users = db.getUsers();
我正在尝试以此创建一组所有唯一用户,但是问题是我也在寻找根据年龄对他们进行排序。我目前使用过-
Set<User> set = users.stream().collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
如何同时对这个集合排序,有什么想法吗?
在前面的问题中,我曾问过我应该使用哪个FunctionalInterface?
现在,我尝试添加到List<Integer>而不是两个Integers a和b,这样每个索引都添加到另一个列表的相同索引中。
我以前有
BinaryOperator<Integer> binaryOperator = Integer::sum;
Run Code Online (Sandbox Code Playgroud)
用于使用加上两个整数binaryOperator.apply(int a,int b)。有没有类似的方式
BinaryOperator<List<Integer>> binaryOperator = List<Integer>::sum;
Run Code Online (Sandbox Code Playgroud)
然后得到结果List<Integer> cList?