我有以下代码:
List<Object> list = new ArrayList<>();
list.addAll(method1());
if(list.isEmpty()) { list.addAll(method2()); }
if(list.isEmpty()) { list.addAll(method3()); }
if(list.isEmpty()) { list.addAll(method4()); }
if(list.isEmpty()) { list.addAll(method5()); }
if(list.isEmpty()) { list.addAll(method6()); }
return list;
Run Code Online (Sandbox Code Playgroud)
是否有一种很好的方式有条件地添加元素,可能使用流操作?我想只在列表为空时添加来自method2的元素,否则返回等等.
编辑:值得一提的是,这些方法包含大量逻辑,因此需要防止执行.
我现在正在学习lambda,我想知道如何用lambda一行编写这段代码.
我有一个Person包括ID和name字段的类
目前,我有一个List<Person>存储这些Person对象.我想要完成的是获取一个由人的id组成的字符串.
"id1,id2,id3".
我怎样才能用lambda实现这个目标?
我想转换我看起来像这样的地图:
{
key="someKey1", value=Apple(id="1", color="green"),
key="someKey2", value=Apple(id="2", color="red"),
key="someKey3", value=Apple(id="3", color="green"),
key="someKey4", value=Apple(id="4", color="red"),
}
Run Code Online (Sandbox Code Playgroud)
到另一个地图,将所有相同颜色的苹果放入同一个列表中:
{
key="red", value=list={apple1, apple3},
key="green", value=list={apple2, apple4},
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
Map<String, Set<Apple>> sortedApples = appleMap.entrySet()
.stream()
.collect(Collectors.toMap(l -> l.getColour, ???));
Run Code Online (Sandbox Code Playgroud)
我是在正确的轨道上吗?我应该使用过滤器来执行此任务吗?有没有更简单的方法?
我在C#中创建简单的webform.在这里,我通过连接哪个效果很好来获得完整的地址.但是,让我们说,如果我没有address2,city等等,那么我想在每一个字符串的结尾跳过附加逗号(例如,如果address1为空或空).
string address1 = "Address1";
string address2 = "Address2";
string city = "City";
string country = "Country";
string postalCode = "00000";
string fullAddress = ? --> address1 + ","+ address2 +","+ city and so on
Run Code Online (Sandbox Code Playgroud) 我在学习的过程中认识到这Parallelism是一个主要优势Spliterator.
这可能是一个基本的问题,但任何人都可以解释我的主要差异Iterator,并Spliterator和举一些例子?
我知道Stream.concat存在(doc)来连接两个流.但是,我遇到了需要在现有流中添加"更多"项目,然后继续处理它的情况.在这种情况下,我本来希望能够将以下方法联系在一起:
getStream(someArg)
.map(Arg::getFoo)
.concat(someOtherStreamOfFoos) // Or append, or...
.map(...)
Run Code Online (Sandbox Code Playgroud)
但是,不存在这种实例级可链接append/concat方法.
这不是一个问题,要求解决这个问题,或更优雅的方法(虽然我当然会感激任何其他观点!).相反,我问的是导致这一决定的设计因素.我相信,Stream界面是由一些非常聪明的人设计的,他们都知道最小惊讶原则 - 所以,我必须假设他们决定省略这个(对我来说)直观明显的方法,这意味着该方法是一个反模式,或由于某些技术限制而无法实现.我很想知道原因.
我正在进行服务电话并尝试处理响应.响应可能有一个列表.该列表可能为null.
此外,如果列表不为null或不为空,则需要对其进行过滤.在代码"entry"中,如果过滤不提供任何内容或响应列表为空或null,则引用可能为null.
目前,当我尝试在空响应列表上使用stream()时,我正在获取NPE.我该如何处理这种情况?
@Getter
public class ServiceResponse {
List<ResponseEntry> entryList;
}
@Getter
public class ResponseEntry {
String value;
}
ServiceResponse serviceResponse = service.getServiceResponse();
ResponseEntry entry = serviceResponse.getEntryList()
.stream()
.filter(e -> "expectedValue".equals(e.getValue()))
.findFirst()
.orElse(null);
if (entry == null) { ... }
Run Code Online (Sandbox Code Playgroud)
我试图从一个长变量中获取第二个数字.
long mi = 110000000;
int firstDigit = 0;
String numStr = Long.toString(mi);
for (int i = 0; i < numStr.length(); i++) {
System.out.println("" + i + " " + numStr.charAt(i));
firstDigit = numStr.charAt(1);
}
Run Code Online (Sandbox Code Playgroud)
当我firstDigit = numStr.charAt(1)在控制台上打印时.我得到1预计但当循环结束firstDigit了49.有点困惑为什么.
我有一个Model具有以下签名的课程:
class Model {
private String stringA;
private String stringB;
public Model(String stringA, String stringB) {
this.stringA = stringA;
this.stringB = stringB;
}
public String getStringA() {
return stringA;
}
public String getStringB() {
return stringB;
}
}
Run Code Online (Sandbox Code Playgroud)
我想将a映射List<Model>到List<String>包含stringA和stringB的单个流中
List<String> strings = models.stream()
.mapFirst(Model::getStringA)
.thenMap(Model::getStringB)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
要么:
List<String> strings = models.stream()
.map(Mapping.and(Model::getStringA,Model::getStringB))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
当然,他们都没有编译,但你明白了.
它有可能吗?
编辑:
例:
Model ab = new Model("A","B");
Model cd = new Model("C","D");
List<String> stringsFromModels = {"A","B","C","D"};
Run Code Online (Sandbox Code Playgroud) 我知道下面是查找列表中每个字符串属性的出现的代码,如何仅使用重复项过滤此列表,即出现多于1次.对不起,我是java 8的新手.
Map<String, Long> result = list.stream()
.collect(Collectors.groupingBy(Function.identity(),
Collectors.counting()));
Run Code Online (Sandbox Code Playgroud) java ×8
java-8 ×8
java-stream ×7
lambda ×2
c# ×1
collections ×1
iterator ×1
long-integer ×1
optional ×1
spliterator ×1