我试图从基于两个属性的对象列表中删除重复项,这个问题类似于下面的链接,但是我试图使用Java 8功能基于两个属性找到唯一性。
示例:我有一个自定义对象,其中两个属性一起构成唯一的条目
说列出客户
customerName和DOB一起进行唯一输入。
使用两个属性的谓词来识别区别的任何解决方案。像下面的链接,他们对一个属性有解决方案。 Java 8按属性区分
类似的问题:
我试图使用Java 8从Map获取平均值,但是我没有获取值本身,而是想获得Map.Entry.
double average = totals.entrySet()
.stream()
.mapToDouble(i -> i.getValue())
.average()
.orElse(0); //Want to get Map.Entry instead
Run Code Online (Sandbox Code Playgroud) 如何更改下面的代码在java 8中使用流来检查类型对象并进行转换?java 8还有其他选择吗?
private void fillObject(Object role, String issuingRange) {
if (role != null) {
List<String> rangeList2 = null;
if (role instanceof ArrayList<?>) {
rangeList2 = (ArrayList<String>) role ;
} else if (role instanceof String) {
rangeList2 = new ArrayList(Arrays.asList(role ));
}
}
Run Code Online (Sandbox Code Playgroud) 据我所知,Java 8引入了一种可用于Collection类型的新方法:removeif()。它接受一个谓词,该谓词定义了应删除元素的条件。它返回一个布尔值,其中“真”响应表示已删除至少一个项目,否则返回“假”:我有此类:
HotelPriceSummary {
Hotel hotel;
float price
}
Run Code Online (Sandbox Code Playgroud)
一种 List<HotelPriceSummary> allHotels;
和 Iterable<Hotel> discardedHotels
我想做类似的事情(显然,existIn是一个不存在的函数,是表达我想做的事情,但我没有找到方法)
allHotels.removeIf(h -> h.getHotel().existsIn (discardedHotels))
Run Code Online (Sandbox Code Playgroud) 从Java 8开始,我们可以在接口中定义静态和默认方法.但我需要确保一个公共静态方法说foo()要在实现特定接口的所有类中实现interface A.我该怎么做,或者它是否可能?
界面A:
package com.practice.misc.interfacetest;
public interface A {
public static Object foo(); //Eclipse shows error : 'This method requires a body instead of a semicolon'
String normalFunc();
}
Run Code Online (Sandbox Code Playgroud)
B级:
package com.practice.misc.interfacetest;
public class B implements A{
@Override
public String normalFunc() {
return "B.normalFunc";
}
//I need to ensure that I have to define function foo() too
}
Run Code Online (Sandbox Code Playgroud)
C级:
package com.practice.misc.interfacetest;
public class C implements A{
@Override
public String normalFunc() {
return "C.normalFunc";
}
//I …Run Code Online (Sandbox Code Playgroud) 我有一份员工名单,有不同的经历,如
5.0,3.3,5.5,5.6,4.5等..
当我试图通过使用Math.round它给出错误的结果来排序最大到最小经验时,例如:
5.6,5.0,5.5,5.3,4.5等..
我想要的结果如下:
5.6,5.5,5.3,5.0,4.5等..
我在这里用过Collections.sort:
Collections.sort(employeeList, new Comparator<Emp>() {
@Override
public int compare(Emp t, Emp t1) {
return Math.round(t.getExperience() - t1.getExperience()); // which giving wrong results
// return Float.compare(t.getExperience() - t1.getExperience()); // which is not working
}
});
Run Code Online (Sandbox Code Playgroud)
这里t1.getExperience()将给你浮动结果.
我最近看到一种让我在SO上问这个问题的行为.我希望人们能够分享他们的发现.
如果使用JDK 1.8 u66和JDK 1.8 u121编译(未更改)相同的文件,那么类文件(字节码)会不同吗?我的意思是:
1)我使用JDK 1.8 u66编译应用程序2)我对1或2个文件进行了更改,并使用JDK 1.8 u66重新编译.
我是否可以期待一些未更改的类文件具有不同的二进制内容,即使它们没有更改?
我的理由是,当我把一个文件的哈希值作为我上面步骤的一部分没有改变时 - 它们在磁盘上有相同的大小,但哈希码完全不同.我使用Winmerge比较这两个版本,其中大小报告相同,但二进制内容不同.以下是我使用Winmerge进行比较的结果(蓝色标记的项目与我的源名称相关,因此我不得不掩盖它) - 但请注意208和248中的区别.
这是预期的吗?如果有的话,有人可以请我指出解释这个问题的文献吗?
问候,
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("MM/yyyy");
LocalDate parsedDate = LocalDate.parse(entryOne.getKey(), dateFormat)
Run Code Online (Sandbox Code Playgroud)
获得例外
无法解析文本'03/2018':无法从TemporalAccessor获取LocalDate:
如何解析此字符串并使用具有默认的第一天的Java 8转换为Date.我们使用的东西.
TemporalAdjusters.firstDayOfMonth()
Run Code Online (Sandbox Code Playgroud) 我有一张地图清单。该映射包含字符串作为键和对象作为值。最可能的值也为字符串。我想按一个值分组,以便将一组值作为键,将另一组唯一值作为列表。实际上,地图列表是沙发基准选择数据。
例如:
[{"id":"1", "status":"pending"},{"id":"2", "status":"download"},{"id":"3", "status":"pending"},{"id":"4", "status":"pending"}, {"id":"5", "status":"ready"},{"id":"6", "status":"download"}] => {"pending":["1","3","4"], "download":["2","6"], "ready":["5"]}
Run Code Online (Sandbox Code Playgroud) 对于快速示例,我有以下字符串:
String s = "hey.there.man.${a.a}crazy$carl${a.b}jones
Run Code Online (Sandbox Code Playgroud)
我也有以下方法:
private String resolveMatchedValue(String s) {
if(s.equals("a.a")) {
return "A";
else if(s.equals("a.b")) {
return "Wallet";
else if(.....
....
}
Run Code Online (Sandbox Code Playgroud)
我的模式是
Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}");
Run Code Online (Sandbox Code Playgroud)
因此,对于匹配$ {.*}的s中的每个子字符串,我希望调用resolveMatchedValue方法,并且应该替换它.理想情况下,在正则表达式过程之后应该如此
s = "hey.there.man.Acrazy$carl$Walletjones
Run Code Online (Sandbox Code Playgroud)
我已经查看了类似的解决方案,但没有根据匹配的值动态替换匹配的值,并且无法使其工作
编辑:使用java8