我喜欢上课
public class RoleAccess {
private String roleId;
private List<String> apiIdList;
public String getRoleId() {
return roleId;
}
public void setRoleId(String roleId) {
this.roleId = roleId;
}
public List<String> getApiIdList() {
return apiIdList;
}
public void setApiIdList(List<String> apiIdList) {
this.apiIdList = apiIdList;
}
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列表,它将添加来自roleaccess的所有apiIdlist
List<String> apiIdList = new ArrayList<>();
for (RoleAccess roleAccess : roleAccessList) {
if (roleAccess.getApiIdList() != null) {
apiIdList.addAll(roleAccess.getApiIdList());
}
}
Run Code Online (Sandbox Code Playgroud)
我们如何处理流api或哪个是最佳解决方案呢?
我检查了正常的对象列表列表,但我想要列出的对象和内部列表列表我试过这个
List<String> apiIdList = roleAccessList.stream()
.map(RoleAccess::getApiIdList)
.collect(ArrayList::new, List::addAll, List::addAll);
Run Code Online (Sandbox Code Playgroud) 给定字母到数字的映射,我想返回一个字符串列表,其中每个字符串都是以逗号分隔的列表,这些列表按字母的关联编号分组。
对于这张地图
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 4);
map.put("D", 1);
map.put("E", 1);
map.put("F", 2);
Run Code Online (Sandbox Code Playgroud)
我想返回一个包含以下内容的列表:
"A,D,E" "B,F", "C"
Run Code Online (Sandbox Code Playgroud)
有什么建议可以使用1.8流功能实现吗?
为什么这段代码给我一个异常?
String myFormat = "dd MMMMM uuuu";
String dateToFormat = "26 Mai 2010";
DateTimeFormatter myFormatter = new DateTimeFormatterBuilder().appendPattern(myFormat)
.toFormatter().withResolverStyle(ResolverStyle.STRICT);
LocalDate myDate=LocalDate.parse(dateToFormat,myFormatter);
Run Code Online (Sandbox Code Playgroud)
例外:
java.time.format.DateTimeParseException: Text '26 Mai 2010' could not be parsed at index 4
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDate.parse(LocalDate.java:400)
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用“ MMMM”而不是“ MMMMM”,它将按预期工作。
String myFormat = "dd MMMM uuuu";
Run Code Online (Sandbox Code Playgroud) 这个问题解决了几秒钟的情况:如何在Java 8(Scala)中将日期时间字符串转换为long(UNIX Epoch Time)
但是,如果我想要毫秒,似乎必须使用
def dateTimeStringToEpoch(s: String, pattern: String): Long =
LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
.atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0)))
.toInstant().toEpochMilli
Run Code Online (Sandbox Code Playgroud)
这对于我在另一个问题中详细介绍的4个问题是很丑陋的(我不喜欢的主要内容是魔术文字"UTC"和魔术数字0)。
不幸的是以下内容无法编译
def dateTimeStringToEpoch(s: String, pattern: String): Long =
LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
.toEpochMilliSecond(ZoneOffset.UTC)
Run Code Online (Sandbox Code Playgroud)
如toEpochMilliSecond不存在
我想将流收集到Map中,其中的键已排序,所以我尝试了:
TreeMap<LocalDate, MenuChart2.Statistics> last3MPerDay =
menuPriceByDayService.findAllOrderByUpdateDate(menu, DateUtils.quarterlyDate(), 92)
.stream()
.sorted(comparing(MenuPriceByDay::getUpdateDate))
.collect(Collectors
.toMap(MenuPriceByDay::getUpdateLocalDate, p -> new MenuChart2().new Statistics( p.getMinPrice().doubleValue(),
Run Code Online (Sandbox Code Playgroud)
但是我遇到了编译错误
Type mismatch: cannot convert from Map<LocalDate,Object> to
TreeMap<LocalDate,MenuChart2.Statistics>
Run Code Online (Sandbox Code Playgroud) 我试图将一些日期字符串解析为日期值,但是,使用下面的代码,我遇到了异常:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("Q'Q'uuuu - MMM");
String d = "3Q2016 - Aug";
System.out.println(LocalDate.parse(d, formatter));
Run Code Online (Sandbox Code Playgroud)
下面是例外
java.time.format.DateTimeParseException: Text '3Q2016 - Aug' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {MonthOfYear=8, QuarterOfYear=3, Year=2016},ISO of type java.time.format.Parsed
Run Code Online (Sandbox Code Playgroud)
查看异常,我看到了正确的数据,但是由于某种原因无法对其进行解析。
我看到的其他类似主题建议使用LocalDate或LocalDateTime,但均无效。
假设我有一个字符串列表,我想将这些字符串用作流利的构建器的输入。
List<String> scripts;
//initialize list
ScriptRunnerBuilder scriptRunnerBuilder = new ScriptRunnerBuilder();
BiFunction<String,ScriptRunnerBuilder,ScriptRunnerBuilder> addScript =
(script,builder) -> builer.addScript(script);
scriptRunnerBuilder = scripts.stream.map(script ->
addScript.apply(script,scriptRunnerBuilder)).......
scriptRunnerBuilder.build();
Run Code Online (Sandbox Code Playgroud)
我可以使用哪个终端操作,以便对列表中的所有元素调用addScript函数?
问题在于ScriptRunnerBuilder是不可变的,因此ScriptRunnerBuilder.addScript()返回新的ScriptRunnerBuilder对象,而不是修改现有对象-因此,我不能只是一个foreach。
我的意图是携带addScript()调用的结果,并将其用作流中下一个元素的输入
我有两个地图,我需要检查两者是否具有相同的键和相同的键数,并返回一个布尔值。我想为此使用流,我得到的是通过创建另一个列表
mapA
.entrySet()
.stream()
.filter(entry -> mapB.containsKey(entry.getKey()))
.collect(
Collectors.toMap(Entry::getKey, Entry::getValue));
Run Code Online (Sandbox Code Playgroud)
但是我的问题是,我可以在一行中执行此操作吗?它不会创建另一个列表,但是会返回一个布尔值,无论它们是否相同。
我有一个Terminal对象:
class Terminal{
List<TerminalPeriodApplicability> periods= new ArrayList<>();
//few other attributes
//getters & setters
}
Run Code Online (Sandbox Code Playgroud)
TerminalPeriodApplicability 宾语:
class TerminalPeriodApplicability{
String name;
boolean isRequired;
//getters & setters
}
Run Code Online (Sandbox Code Playgroud)
我想根据的值TerminalPeriodApplicability将optional&mandatory Set的名称分为两类isRequired。
我尝试了两种方法。一个与两个forEach,另一个与flatMap。
List<Terminal> terminals= getTerminals();
Set<String> mandatoryPeriods = new HashSet<>();
Set<String> optionalPeriods = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)
方法1:
terminals.forEach(terminal -> terminal.getApplicablePeriods().forEach(period->{
if(period.getIsRequired())
mandatoryPeriods.add(period.name());
else
optionalPeriods.add(period.name());
}));
Run Code Online (Sandbox Code Playgroud)
方法二:
List<TerminalPeriodApplicability> applicablePeriods = terminals
.stream()
.flatMap(terminal -> terminal.getApplicablePeriods().stream())
.collect(Collectors.toList());
applicablePeriods.forEach(period->{
if(period.getIsRequired())
mandatoryPeriods.add(period.name());
else …Run Code Online (Sandbox Code Playgroud) 我写了下面的代码来检查某些情况。
/**
* Returns true if any of the dose detail is an x
* @return boolean
*/
public <DD extends BD<DI>, DI extends BI> boolean Y(final Collection<DD> dds) {
return dds.stream().anyMatch(dd -> dd.M().K());
}
Run Code Online (Sandbox Code Playgroud)
但是此方法有一些风险dds,为空。我需要返回false也是dd也为null。如何使用Java 8将此方法修改为null安全?
java ×10
java-8 ×10
java-stream ×7
collections ×3
datetime ×2
date-parsing ×1
epoch ×1
foreach ×1
lambda ×1
scala ×1