我理解接口方法是隐含的public.Java Docs教程说
界面中的所有
abstract,default和static方法都是隐式的public,因此您可以省略public修饰符.
在抽象,静态和默认情况下,在Java 8中隐式声明了哪些修饰符.
我认为abstractJava 8 default在接口中引入了方法时没有隐式声明,但我仍然在Intellij IDEA中收到警告.
abstract对于接口方法,修饰符' '是冗余的.
public interface TestInterface {
abstract int print(); // abstract redundant ?.
int print2(); //legal.but public or public abstract ?.
}
Run Code Online (Sandbox Code Playgroud) 我有返回的API,Map<String,String>需要将其转换为DTO。
SubjectIdAndNameDTO (id, name constructor args)
id
name
Run Code Online (Sandbox Code Playgroud)
当前的实现使用传统的for循环和Map.EnterSet。我如何使用Java8的功能来简单地执行以下代码。
Map<String, String> map = getSubjectIdAndNameMap();
// How can this code can be improved by using Java8 Stream and method references
List<SubjectIdAndNameDTO> subIdNameDTOList = new ArrayList<>();
for (Entry<String, String> keyset : map.entrySet()) {
SubjectIdAndNameDTO subjectIdNameDTO =
new SubjectIdAndNameDTO(keyset.getKey(), keyset.getValue());
subIdNameDTOList.add(subjectIdNameDTO);
}
Run Code Online (Sandbox Code Playgroud) 我有以下清单
[12_223,13_4356,15_5676]
我能够使用以下代码溢出下划线并将其转换为一个Hashmap
list.stream()
.map(s -> s.split("_"))
.collect(Collectors.toMap(
a -> a[0],
a -> a[1]));
Run Code Online (Sandbox Code Playgroud)
它给出了下面的地图
{"12"="223", "13"="4356", "15"="5676"}
但我想更改此代码,以便它给我一个像下面的地图列表,因为我可能会在分割时遇到重复的键
[{"12"="223"}, {"13"="4356"}, {"15"="5676"}]
如何使用Java Stream迭代List中的2个循环.
public class ArrayStreams {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(7);
list.add(2);
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
System.out.println("i :" + list.get(i) + "J :" + list.get(j));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何将此代码转换为Java Stream.请帮忙!
我有一张静态地图:
private static final Map<SomeObject, AnotherObject> SOME_MAP = ...build map here...
Run Code Online (Sandbox Code Playgroud)
我正在尝试生成一个类型列表 List<AnotherObject>
这按预期工作:
List<AnotherObject> list = Stream.of(SOME_MAP.values())
.flatMap(Collection::stream)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
由于非静态方法无法在静态上下文中引用,因此以下失败
List<AnotherObject> list = SOME_MAP.values().stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
任何人都可以确切地解释第二个版本如何在第一个版本没有的情况下包含非静态方法错误?
这是一个具体的例子:
private static final Map<Integer, Integer> SOME_MAP = ImmutableMap.of(1, 2, 3, 4, 5, 6);
@Test
public void workingTest() {
List<Integer> list = Stream.of(SOME_MAP.values())
.flatMap(Collection::stream)
.collect(Collectors.toList());
System.out.println(list); // prints out [2, 4, 6]
}
@Test
public void nonWorkingTest() {
List<Integer> list = SOME_MAP.values().stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
System.out.println(list); // Fails before this.
}
Run Code Online (Sandbox Code Playgroud)
在失败的测试中,我收到以下错误:
Error:(79, …Run Code Online (Sandbox Code Playgroud) 试图new Date().toString()用Java 支持Javascript的输出格式,DateTimeFormatter但似乎无法使其工作.
Js输出具有以下特性:
我目前的格式化程序:
int defaultOffset = ZonedDateTime.now().getOffset().getTotalSeconds();
DateTimeFormatter dtfJs = new DateTimeFormatterBuilder()
.appendPattern("EE MMM dd yyyy HH:mm:ss [OOOO (zzzz)]")
.parseDefaulting(ChronoField.OFFSET_SECONDS,defaultOffset
.toFormatter();
Run Code Online (Sandbox Code Playgroud)
如果我.parse()从js那些日期字符串,我得到以下错误:
[date]无法在索引25处解析
上述两个日期的指数25为:
我知道问题是:(冒号),因为如果我打印当前日期dtfJs,我得到:
Wed Apr 04 2018 10:25:10 GMT-05:00(哥伦比亚时间)
因此GMT-05:00,GMT-0500在收到的字符串中执行部分,但我找不到与此匹配的保留模式字母.
文档说:
偏移O:根据模式字母的数量格式化本地化偏移.一个字母输出本地化偏移的缩写形式,即局部偏移文本,例如'GMT',小时不带前导零,可选2位数分钟,第二个非零,和冒号,例如'GMT + 8 ".四个字母输出完整形式,这是本地化的偏移文本,例如'GMT,具有2位小时和分钟字段,可选的第二字段(如果非零)和冒号,例如'GMT + 08:00'.任何其他字母数量都会抛出IllegalArgumentException.
偏移Z:根据图案字母的数量格式化偏移.一个,两个或三个字母输出
小时和分钟,没有冒号,例如'+0130'.当偏移量为零时,输出将为"+0000".四个字母输出完整形式的局部偏移,相当于Offset-O的四个字母.如果偏移为零,则输出将是相应的本地化偏移文本.五个字母输出小时,分钟,可选第二个,如果非零,则使用冒号.如果偏移量为零,则输出"Z".六个或更多字母抛出IllegalArgumentException.
这意味着四个字母将始终以冒号":"输出,从而抛出 DateTimeParseException
非常感谢,谢谢 …
字符串是一个输入,我必须检查它是否是这些格式中的任何一种.如果它是sdf1格式然后传递,如果它在sdf2,3 ....然后我添加缺少格式并用sdf1格式解析它
SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ssa");
SimpleDateFormat sdf3 = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
SimpleDateFormat sdf3 = new SimpleDateFormat("MM/dd/yyyy hh:mma");
SimpleDateFormat sdf3 = new SimpleDateFormat("MM/dd/yyyy hh:mm");
SimpleDateFormat sdf3 = new SimpleDateFormat("MM/dd/yyyy");
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的
try{
// Parse if it is MM/dd/yyyy hh:mm:ss a
cal = Calendar.getInstance();
cal.setTime(sdf1.parse(inStr));
}catch(Exception exp){
try{
cal = Calendar.getInstance();
//Parse if it is MM/dd/yyyy hh:mm:ssa
sdf2.parse(inStr);
inStr = new StringBuilder(inStr).insert(str.length()-2, " ").toString();
cal.setTime(sdf1.parse(inStr));
}catch(Exception dte2){
try{
cal = Calendar.getInstance();
//Parse …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个方法,它返回一个类的可选:A,B,C扩展母亲.
我不知道从哪里开始.我试过这样的事
private Optional<U> get(String query,U u){
}
A = c.get("Looking for an A",A.class)
B = c.get("Looking for an B",B.class)
C = c.get("Looking for an C",C.class)
C = c.get("Looking for an k",k.class) // Exception, K doesn't extend `Mother`
Run Code Online (Sandbox Code Playgroud) 如果我不关心线程安全哪个更好?
int[] index = {0};
index[0]++;
Run Code Online (Sandbox Code Playgroud)
VS
AtomicInteger index = new AtomicInteger(0);
index.getAndIncrement()
Run Code Online (Sandbox Code Playgroud) 我有一个String数组,我想使用Java 8流将其转换为BigInteger数组。
String[] output = bigSorting(new String[]{"31415926535897932384626433832795", "1", "4900146572543628830293235422623540449026979", "10", "57500297590012603652986133599394871645776460", "5",
"497010206818067722087306230802257700034825862515267073569769100385728461314", "57500297590012603652986133599394871645776460497010206818067722087306230802257700034825862515267073569769100385728461314497010206818067722087306230802257700034825862515267073569769100385728461314497010206818067722087306230802257700034825862515267073569769100385728461314497010206818067722087306230802257700034825862515267073569769100385728461314497010206818067722087306230802257700034825862515267073569769100385728461314"});
Object[] unsortedBigIntegerArr = convertFromStringArrayToBigIntegerArray(output);
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的方法,但是我无法获取BigInteger数组,但是却能够获取Object数组。
private static Object[] convertFromStringArrayToBigIntegerArray(String[] unsorted) {
return Arrays.stream(unsorted).map(BigSorting2::convertFromStringToBigInteger).toArray();
}
private static BigInteger convertFromStringToBigInteger(String unsorted) {
return new BigInteger(unsorted);
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以使用Java 8流完全完成它。
java-8 ×10
java ×9
java-stream ×5
biginteger ×1
datetime ×1
java-time ×1
javascript ×1
list ×1
performance ×1