将此标记用于特定于Java 8的问题,Java 8是2014年3月18日发布的Java平台的版本8(内部编号1.8)。在大多数情况下,您还应指定java标记。
我正在尝试在 Map 中查找匹配值,如果找到,我需要抛出 IllegalArgumentException。我的代码如下: 最终字符串 stringToBeMatched = "someRandomString"; 地图.values() .
我在客户端中有一个 A 类,在我的项目域中有一个相同的 A1 类。我有一个接收 Set 的函数,我想将其转换为 List 并重新...
我想在日志语句中包含构建信息(构建版本、日期)。 这可以做到吗? 我在 Java 8 应用程序中使用 log4j。
我已将 jdk-19 安装在 C:\Program Files\Java\jdk-19 中 我以前有jdk-8,特别是jdk-8u351,它是用java卸载程序工具卸载的。 问题:我现在想安装相同的版本...
LocalDate 和 sql.Date 之间的转换[重复]
在 Java 8(或更高版本)中 java.sql.Date 和 LocalDate(双向)之间转换的正确方法是什么?
Java 8 Streams:为什么mapToInt需要Integer::parseInt作为参数?
我试图理解下一个示例之后的内容: Stream.of("a1", "a2", "a3") .map(s -> s.substring(1)) .mapToInt(整数::
在 Java 8 中,以下脚本打印 true 导入java.util.regex.Matcher; 导入java.util.regex.Pattern; 公共类主要{ 公共静态无效主(字符串[] args){ 字符串正则表达式 = ...
如何在Map<String, ArrayList<String>>中收集对象列表中的字段列表?
我有一个 AssistantList,需要映射到以下地图 (键 - 助理登录, 值 - 其主管的 ArrayList) 我使用下面的代码来使用 for 循环进行映射。 我如何使用 Stream API 来实现相同的功能
如何汇总具有特定 ID 的列表中对象的属性值,并使用 Streams 将其分配给另一个对象
我的课程。 类我的贷款{ 私人长贷ID; 私人BigDecimal贷款金额; 私人 BigDecimal 总付费; .... } 类客户{ 私人长贷ID; 私人名单 我的课程。 class MyLoan { private Long loanId; private BigDecimal loanAmount; private BigDecimal totalPaid; .... } class Customer { private Long loanId; private List<MyLoan> myLoan; } 我想从 myLoan 迭代 Customer 并计算 totalPaid 量。 我的逻辑是“如果 loanId 是 23491L 或 23492L,则将这两个 loanAmount 的 loanId 相加,并将值设置为 totalPaid 的 loanId 数量23490L”。totalPaid金额始终显示为零,我的逻辑如下。 并且想要使用Java 8流,但是在使用流时无法编写多个条件。 BigDecimal spreadAmount; for (MyLoan myloan: customer.getMyLoan()) { if (myloan.getLoanId() == 23491L || myloan.getLoanId() == 23492L) { spreadAmount = spreadAmount.add(myloan.getLoanAmount()); } if (myloan.getLoanId() == 23490L) { myloan.setTotalPaid(spreadAmount); } } totalPaid字段未修改,因为您的 id 为 23490l 的 MyLoan 实例在其他两个 MyLoan 之前遇到。 正如 @Silvio Mayolo 在评论中建议的那样,您应该首先使用临时变量计算总量,然后将其分配给 id 为 23490l 的 totalPaid 实例的 MyLoan 字段。 这是您想要做的事情的流实现: //If to make sure that the element MyLoan invoking the setter is actually present if (myLoan.stream().map(MyLoan::getLoanId).anyMatch(value -> value == 23490l)){ myLoan.stream() .filter(loan -> loan.getLoanId() == 23490l) .findFirst() .get() .setTotalPaid(myLoan.stream() .filter(loan -> loan.getLoanId() == 23491l || loan.getLoanId() == 23492l) .map(MyLoan::getLoanAmount) .reduce(BigDecimal.valueOf(0), (a, b) -> a = a.add(b))); } 警告:如果列表中不存在 id 为 23490l 的 get(),则在通过终端操作 Optional 检索的 findFirst() 上调用的方法 NoSuchElementException 可能会抛出 MyLoan。您应该首先确保该元素存在,就像我对 if 语句所做的那样。 首先,您需要获取要定义总支付金额的贷款。如果此步骤成功,则计算总数。 为了使用流查找具有特定 ID 的 loan,您需要在 customers Loan 上创建一个流,并在其上结合 filter() 应用 findFirst()。它会为您提供流中与传递到 filter 的谓词相匹配的第一个元素。由于结果可能不存在于流中,因此 findFirst() 返回一个 Optional 对象。 可选类提供了多种与其交互的方法,如 orElse()、ifPresent()、orElse()等。避免盲目使用 get(),除非您没有检查该值是否存在,这在许多情况下都存在案例并不是处理它的最方便的方法。就像下面的代码一样,如果存在值,则使用 ifPresent() 继续执行逻辑。 因此,如果找到所需的贷款,下一步就是计算总额。这是通过过滤掉目标 ID、通过应用 map() 提取金额并使用 reduce() 作为终端操作将金额相加来完成的。 public static void setTotalPaid(Customer customer, Long idToSet, Long... idsToSumUp) { List<MyLoan> loans = customer.getMyLoan(); getLoanById(loans, idToSet).ifPresent(loan -> loan.setTotalPaid(getTotalPaid(loans, idsToSumUp))); } public static Optional<MyLoan> getLoanById(List<MyLoan> loans, Long id) { return loans.stream() .filter(loan -> loan.getLoanId().equals(id)) .findFirst(); } public static BigDecimal getTotalPaid(List<MyLoan> loans, Long... ids) { Set<Long> targetLoans = Set.of(ids); // wrapping with set to improve performance return loans.stream() .filter(loan -> targetLoans.contains(loan.getLoanId())) .map(MyLoan::getLoanAmount) .reduce(BigDecimal.ZERO, BigDecimal::add); }
据我所知,随着 Java 7 中 MethodHandle 的引入,也引入了编译器生成的方法重载。 MethodHandle 的 javadoc 指出(我已经修剪了示例):...
如何使用 Java 8 Stream/Lambda 计算整数中尾随零的数量?
如何使用 Java 8 Stream/Lambda 计算整数中尾随零的数量? 基本上逻辑应该是:只要余数为 0,就保持整数除以 10(商将...
java.time.format.DateTimeParseException:无法在索引 21 处解析文本
我得到的日期时间值为 创建于 '2012-02-22T02:06:58.147Z' 只读。创建此任务的时间。 这是由 Asana API 给出的 我正在使用 Java 8 将日期时间解析为
我有一个如下的方法: 公共无效方法() { 列表 list1 = someOperation(); 列表列表2; 长失败计数 = 0; 对于(字符串 e...
我有一个像这样的字符串: blabla 和 ((:something) 中的 ee.xybfkr_eer 或 'Y'=:see) 我只想捕获组中 (:something) 中的字符串 ee.xybfkr_eer 。 但有时字符串是w...
使用 java 8 功能(流、lambda 等)按降序对 int 数组进行排序
令人惊讶的是,在 java 8 之前,java 中似乎没有简单的单行解决方案来按降序对 int 数组进行排序。例如,请查看这篇文章。现在我们有了 java 8,还有
Java 8 日期和时间 API - 解析 yyyy-MM-dd'T'HH:mm:ss.SSSZ
我正在尝试解析 ISO8601 格式的日期: yyyy-MM-dd'T'HH:mm:ss.SSSZ 我是否正确,无法使用 java.time.format.DateTimeFormat 中定义的任何默认格式来解析它...
在 Java8 中使用时区格式化 LocalDateTime
我有这个简单的代码: DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z"); LocalDateTime.now().format(FORMATTER) 然后我会得到以下异常: 我...
API调用后如何建立辅助数据库连接。目前数据库是在运行时建立连接。 以下是代码示例。 控制器代码: @GetMapping("/
在 C# 中,您可以将 lambda 表达式包含在表达式树对象中,然后可能对其进行解析。我想知道这在Java中是否也可行? 我正在寻找的是做类似的事情...