我想知道这是否可以作为流函数更整洁地编写:
MyObject myObject = new MyObject();
for (Thing thing : listofThings) {
myObject = myObject.combine(thing);
}
Run Code Online (Sandbox Code Playgroud) 我有一个需要的案例
map一个对象,如果映射函数抛出异常,我将其映射到null.filternull对象的映射流,如果为null则抛出异常,否则收集到List.我怎么做到这一点?
list.stream().map(ob-> {
try {
// cannot throw only catch
return function(ob);
} catch (Exception e) {
log.error(e);
return null;
}
}).filter(Objects::isNull).findFirst().orElseThrow(Exception::new);
Run Code Online (Sandbox Code Playgroud)
现在我的问题是我应该如何将上述lambda调整/重构为throw new Exception()on null或者collect(Collectors.toList()).
java 8中的两个列表对象的交集.有人能告诉我我做错了什么吗?
List<Student> originalStudent = new ArrayList<>();
List<Student> newStudent = new ArrayList<>();
List<Student> intersectListStudent = new LinkedList<>()
originalStudent.add(new Student("William", "Tyndale",1));
originalStudent.add(new Student("Jonathan", "Edwards",2));
originalStudent.add(new Student("Martin", "Luther"),3);
newStudent.add(new Student("Jonathan", "Edwards",2));
newStudent.add(new Student("James", "Tyndale",4));
newStudent.add(new Student("Roger", "Moore",5));
originalStudent.forEach(n ->
newStudent.stream()
.filter(db -> !n.getName().equals(db.getName()) &&
!n.getLastName().equals(db.getLastName()))
.forEach(student-> intersectListStudent .add(student)));
Run Code Online (Sandbox Code Playgroud) 我的目标是打印出四个中的两个值 - 名称(字符串)和头发颜色(枚举) - 描述arraylist中的某个对象.问题在于按名称按字母顺序对打印列表进行排序.这一切都必须在一个lambda.
我只是打印出来而没有排序.我已经设置了覆盖但是因为我还在学习,我似乎无法让它工作.
public void printAllNamesColours() {
people.stream()
.forEach(n->System.out.println(n.getName() + " " + n.getColour()));
}
@Override
public int compareTo(Person person) {
int ret = name.compareToIgnoreCase(person.name);
if (ret == 0) {
ret = colour.compareTo(person.colour);
}
if (ret == 0) {
ret = age - person.age;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud) 我有平面对象POJO:
class FamilyInformation {
String house;
String familyMember;
}
Run Code Online (Sandbox Code Playgroud)
使用这样的数据:
[{
house: "houseName1",
familyMember: "Son"
},
{
house: "houseName1",
familyMember: "Mom"
},
{
house: "houseName1",
familyMember: "Dad"
}]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为分层对象POJO:
class House {
String houseName;
List<FamilyMember> familyMembers;
}
class FamilyMember {
String familyMember;
}
Run Code Online (Sandbox Code Playgroud)
我发现的每一条信息都是将其转换为地图.但是我想要List<House>包含List<FamilyMember>任何想法我该怎么办?
使用Stream.reduce反演求和不正确,这里出了什么问题?
double[] array = {1.0, 2.0};
double iunversionSum = Arrays.stream(array).reduce(0.0, (a, b) -> Double.sum(1.0 / a, 1.0 / b));
Run Code Online (Sandbox Code Playgroud)
输出为.5,但预计为1.5(1/1 + 1/2)
我有一个GroupOffices列表
List<GroupOffice> officesOfTheGroup;
Run Code Online (Sandbox Code Playgroud)
我想搜索id是否等于groupOffice.getId(长值),但标签为groupOffice.getLabel(字符串),并将其分配给布尔值。下面的代码运行良好,但是有没有比使用for循环遍历所有项目更好的方法了?
public GroupOfficeDto saveGroupOffice(GroupOfficeDto groupOfficeDto) {
List<GroupOffice> officesOfTheGroup = //some list from db..
for (GroupOffice go : officesOfTheGroup) {
if ((!go.getId().equals(groupOfficeDto.getId())) && go.getLabel().equals(groupOfficeDto.getLabel())) {
return groupOfficeDto;
}
return null:
}
Run Code Online (Sandbox Code Playgroud)
或者如何使用流?如果是这样,使用流是更好的方法吗?
注意:我正在使用Java8
我想使用Java流执行以下操作:
我有一个Map<Enum, List<A>>,我想将它转化到List<B>哪里B都有属性Enum, A.
因此,对于该键列表中的每个键和每个项目,我需要创建一个项目B并将所有项目收集到一个项目中List<B>.
如何使用Java流完成?
谢谢!
我有一个项目列表(MyDetail对象),我想用流排序方法排序.该对象有3个字段:field1,field2,field3.我想先按field3然后按field2然后按field1排序,所有都按相反顺序排序.所以我写了一个方法sortMyList.
我有一个未排序的项目列表unSortedDetails如下:myDetail1:"20180201",false,false myDetail2:"20180101",false,false myDetail3:"20180101",false,true
在sortMyList(unSortedDetails)之后,我希望我的结果是myDetail3,myDetail1,myDetail2,但实际结果是myDetail1,myDetail3,myDetail2,为什么?
所以,如果我像下面这样实现Comparable for MyDetail,那么它按预期工作.这太奇怪了.我无法弄清楚为什么.谢谢你的帮助!
public List<MyDetail> sortMyList(List<MyDetail> unSortedDetails){
List<MyDetail> myDetails = unSortedDetails
.stream().sorted(Comparator.comparing(MyDetail::getField11).reversed()
.thenComparing(MyDetail::getField2).reversed()
.thenComparing(MyDetail::getField3).reversed())
.collect(Collectors.toList());
return myDetails;
}
@Setter
@Getter
public class MyDetail{
String field1;
Boolean field2;
Boolean field3;
}
@Setter
@Getter
public class MyDetail implement Comparable<MyDetail>{
String field1;
Boolean field2;
Boolean field3;
@Override
public int compareTo(MyDetail o) {
if (this == o || this.equals(o)) return 0;
if (field3) return -1;
if (o.field3) return 1;
if (!field3 && !o.field3 && field2) return -1;
if(!field3 && …Run Code Online (Sandbox Code Playgroud) 我想使用类似代码构建一个Sort对象Optional:
private Sort buildSort(Collection<String> fields) {
fields.stream()
.map(this::buildOrder)
.collect(Sort.unsorted(), ????, ????);
}
Run Code Online (Sandbox Code Playgroud)
buildOrder 是:
private Order buildOrder(String field) {
if (field.startsWith("-")) {
return Order.desc(field.substring(1));
}
else {
return Order.asc(field);
}
}
Run Code Online (Sandbox Code Playgroud)
我需要返回一个Sort.unsorted()if流为空,或者组合每个Sort对象.
Sort对象有一个and代表构建和连接订单的方法.
Sort.by(sort1)
.and(sort2)...
Run Code Online (Sandbox Code Playgroud)
所以我需要:
if (stream is empty) then
return Sort.unsorted
else
return foreach item in stream:
Sort.by(item).and(item2).and(item3)...
Run Code Online (Sandbox Code Playgroud)
类别:
org.springframework.data.domain.Sort
org.springframework.data.domain.Sort.Order
Run Code Online (Sandbox Code Playgroud)
注意
我需要使用stream-api!