我有一个Question
课程如下:
public class Question {
private String name;
private String type;
private boolean isAdded;
...
getters and setters
}
我想要一个问题列表中的所有问题,其中isAdded = true附加了':'如果问题名称是特殊的,那么特殊类型值。
最终的字符串应如下所示:
questionname1:questionname2:Special-type value:questionname4
我写道:
List<String> slist = questionList.stream().filter(q -> q.isAdded() == true).map(name-> name.getName()).collect(Collectors.toList());
String final = String.join(":", slist);
我将所有字符串名称附加为:但如果问题名称为Special,则不要获取类型值。
请让我知道应该做出哪些改变。
答案 0 :(得分:4)
这应该有效
list.stream()
.filter(Question::isAdded)
.map(item-> item.getName().equals("Special") ? item.getType() : item.getName())
.collect(Collectors.joining(":"))
答案 1 :(得分:1)
您可以在传递给map()
的lambda表达式中包含一个条件:
.map(q -> q.getName().equals("Special") ? "Special-type value" : q.getName())
完整的Stream
管道将是:
List<String> slist =
questionList.stream()
.filter(q -> q.isAdded())
.map(q -> q.getName().equals("Special") ? "Special-type value" : q.getName())
.collect(Collectors.toList());
顺便说一句,如果你想加入List
到一个String
,你可以直接这样做:
String finalValue =
questionList.stream()
.filter(q -> q.isAdded())
.map(q -> q.getName().equals("Special") ? "Special-type value" : q.getName())
.collect(Collectors.joining(":"));
P.S。如果你想要字符串&#34;特殊类型值&#34;那么你的措词就不清楚了。当名称为&#34; Special&#34;时使用,或使用您未指定如何获取的其他值。