I\xe2\x80\x99d 喜欢使用 Java 8 流来获取字符串流(例如从纯文本文件中读取)并生成句子流。我认为句子可以跨越界限。
\n\n例如,我想从:
\n\n"This is the", "first sentence. This is the", "second sentence."\nRun Code Online (Sandbox Code Playgroud)\n\n到:
\n\n"This is the first sentence.", "This is the second sentence."\nRun Code Online (Sandbox Code Playgroud)\n\n我可以看到它 \xe2\x80\x99s 可以得到句子部分的流,如下所示:
\n\nPattern p = Pattern.compile("\\\\.");\nStream<String> lines\n = Stream.of("This is the", "first sentence. This is the", "second sentence.");\n\nStream<String> result = lines.flatMap(s -> p.splitAsStream(s));\nRun Code Online (Sandbox Code Playgroud)\n\n但后来我\xe2\x80\x99m 不确定如何生成一个流来将片段连接成句子。我想以一种惰性的方式执行此操作,以便仅读取原始流中需要的内容。有任何想法吗?
\n我是使用 lambda 和流的新手。我正在尝试打印一个已排序并删除重复项并格式化的 ArrayList。我知道以下方法会起作用:
list.stream().distinct().forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)
这将产生 ADFJKLXZ 或我列表中的任何随机字符的输出。但是,我希望输出看起来像 A、D、F、J、K、L、X、Z
我已经尝试过这个:
list.stream().distinct().forEach(System.out::printf("%s, ", ));
Run Code Online (Sandbox Code Playgroud)
我想我可能仍然对 :: 为什么上面的代码不起作用以及我该如何修复它有一些困惑?
我有一个类似 classe User{ String Department; 的类;字符串地址;我有用户列表,我可以使用 java 8 Stream/map/collect 获得以下输出吗
List<User> userList=getUserList();
Map<String,List<String>> userAddressMap=new HashMap<String,List<String>>();
for(User user : userList){
List<String> addressList=userAddressMap.get(user.getDepartment());
if(addressList==null){
userAddressMap.put(user.getDepartment(),addressList);
}
addressList.add(user.getAddress);
}
Run Code Online (Sandbox Code Playgroud) 我收到“不兼容的类型,必需:CopyOnWriteArrayList,找到:对象”,内容如下。我正在使用 IntelliJ 2016.1.1。
CopyOnWriteArrayList<Foo> l = fields.stream()
.distinct()
.collect(toCollection(CopyOnWriteArrayList::new));
Run Code Online (Sandbox Code Playgroud) 我必须编写程序,该程序应该读取字谜文件并显示单词+他的字谜。Txt文件很大,使用扫描仪后,listOfWords大小为:25000。
输出示例:
word anagram1 anagram2 anagram3 ...
word2 anagram1 anagram2...
Run Code Online (Sandbox Code Playgroud)
我有代码,它可以工作,但速度很慢:
private static List<String> listOfWords = new ArrayList<String>();
private static List<ArrayList<String>> allAnagrams = new ArrayList<ArrayList<String>>();
public static void main(String[] args) throws Exception {
URL url = new URL("www.xxx.pl/textFile.txt");
Scanner scanner = new Scanner(url.openStream());
while (scanner.hasNext()) {
String nextToken = scanner.next();
listOfWords.add(nextToken);
}
scanner.close();
while (listOfWords.isEmpty() == false) {
ArrayList<String> anagramy = new ArrayList<String>();
String wzor = listOfWords.remove(0);
anagramy.add(wzor);
char[] ch = wzor.toCharArray();
Arrays.sort(ch);
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 我有两个简单的 POJO:
public class Parent {
String name;
List<Child> children = new ArrayList<>();
void addChild(Integer age) { children.add(new Child(age)); }
}
public class Child {
Integer age;
}
Run Code Online (Sandbox Code Playgroud)
然后我生成一些数据,为父级 100 个子级添加:
List<Parent> parentList = new ArrayList<>();
Parent first = new Parent("first");
for (int i = 0; i < 100; ++i) { first.addChild(i); }
parentList.add(first);
Run Code Online (Sandbox Code Playgroud)
我的目标是消除所有十岁以下的儿童:
parentList.stream().forEach(parent -> {
parent.setChildren(getChildrenOlderThan(parent));
});
List<Child> getChildrenOlderThan10(Parent parent) {
return parent.getChildren().stream()
.filter(child -> child.getAge() > 10)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
最后我列出了十岁以上的孩子。但我不想编写一个单独的方法 getChildrenOlderThan。
如何仅使用单个流让所有列出十岁以上儿童的父母?
我使用流将旧代码更改为新代码。但是当我启动tomcat时它不断出现
错误 osweb.servlet.DispatcherServlet - 上下文初始化失败 org.springframework.beans.factory.BeanDefinitionStoreException:无法读取候选组件类:文件 xxx(我的 FilePath)嵌套异常是 java.lang.ArrayIndexOutOfBoundsException:25091”
谁能告诉我是什么原因导致这个错误?我真的很感谢你的帮助。
/*old*/
for(String key:paramMap.keySet()){
if(key.startsWith("NUMBER_OF_") ){
String value = request.getParameter(key);
if(value!=null && !value.equals("")){
br.append(key.replace("NUMBER_OF_", "")).append(" = ")
.append('"').append(value).append('"').append(" and ");
}
}
}
/*new*/
new ArrayList<>(paramMap.keySet()).stream().filter(p -> p.startsWith("NUMBER_OF_")).forEach(
o ->{
String value = request.getParameter(o);
if(value!=null && !value.equals("")){
br.append(o.replace("NUMBER_OF_", "")).append(" = ")
.append('"').append(value).append('"').append(" and ");
}
});
Run Code Online (Sandbox Code Playgroud)
整个堆栈跟踪:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\apache-tomcat-7.0.61\webapps\web\WEB-INF\classes\com\ais\brm\web\controllers\system\metadic\MetaDicManageController.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:260)
org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)
org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1419)
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) …Run Code Online (Sandbox Code Playgroud) 我正在读取结构如下的 CSV 文件:
1;Miller Hame; 1,2,3,4,5.....; 1232323;
Run Code Online (Sandbox Code Playgroud)
我必须把它分成String[],我可以处理每一行,每一行"Part"
到目前为止我的代码:
Stream<String> input = java.nio.file.Files.lines(java.nio.file.Paths.get("data.csv"));
String[] lines = input.skip(1)
.map(s->s.split(";"))
.toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)
事实上我正在得到java.lang.ArrayStoreException。
(是的,这是为了家庭作业,但我不想要整个解决方案,只想要工作的一小部分。)
我一直在尝试使用Stream 的收集方法,将列表转换为 HashMap。我使用下面的代码作为参考:
String result = list.parallelStream().collect(StringBuilder::new,
(response, element) -> response.append(" ").append(element),
(response1, response2) -> response1.append(",").append(response2.toString()))
.toString();
Run Code Online (Sandbox Code Playgroud)
当我在 eclipse 中编写以下不完整的语句并在 ? 处执行ctrl+操作时space
Map<String,Choice> map1= list1.stream().collect(()-> new HashMap<String,Choice>(),
(r,s) -> r.?,(r,s) -> r.putAll(s));
Run Code Online (Sandbox Code Playgroud)
考虑到使用 StringBuilder 的代码片段,我的期望是,累加器函数的第一个参数应该是 HashMap,因为我已使用 HashMap::new 作为供应商函数。根据这种理解,eclipse应该建议我使用HashMap的方法,但事实并非如此。
然而,这似乎工作正常
list1.stream().collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
Run Code Online (Sandbox Code Playgroud)
已经提到了Java 8 Int Stream Collect with StringBuilder,但是,这方面运气不佳。
我有兴趣将以下代码变成更简洁的代码:
\n\n final String[] strings = {"a", "B", "A", "\xc3\xa1", "\xc3\x81"};\n final Collator collator = Collator.getInstance(Locale.FRANCE);\n collator.setStrength(Collator.PRIMARY);\n\n final Map<String, Set<String>> m = new TreeMap<>(collator);\n for (String s : strings) {\n m.compute(s, (k, v) -> {\n if (v == null)\n v = new TreeSet<String>();\n v.add(s);\n return v;\n });\n }\n\n final Collection<Set<String>> requiredResult = m.values();\n\n requiredResult.forEach(System.out::println);\nRun Code Online (Sandbox Code Playgroud)\n\n输出:
\n\n[A, a, \xc3\x81, \xc3\xa1]\n[B]\nRun Code Online (Sandbox Code Playgroud)\n\n基本上,它的作用是通过忽略大小写和变音标记来将字母视为相等,并将这些“相等”字母分组在一起。(顺便说一句,我知道大多数语言如果变音符号不同,则不认为字母相等;这只是一个人为的示例。)
\n\n我正在考虑通过使用流来缩短它。然而,groupingBy收集器要求将事物按字母分组。我这里没有具体的字母,只有一个Comparator(整理者)。
java-stream ×10
java ×8
java-8 ×8
collectors ×2
anagram ×1
collections ×1
foreach ×1
printf ×1