这是我的问题:我有一个按时间顺序排列的事件名称列表,例如:
ArrayList<String> eventsOrder = new ArrayList<>(Arrays.asList("event1", "event2", "event3", "event4", "event5"));
Run Code Online (Sandbox Code Playgroud)
我有关于事件的数据的 HashMap,其中键是事件名称,例如:
HashMap<String, String> eventsData = new HashMap<>();
eventsData.put("event2", "data2");
eventsData.put("event1", "data1");
eventsData.put("event3", "data3");
Run Code Online (Sandbox Code Playgroud)
我还有一个方法可以将来自 2 个事件的数据合并为 1 个:
public String merge(String previousEventsData, String nextEventsData);
Run Code Online (Sandbox Code Playgroud)
我需要按时间顺序将所有事件的数据合并到一个对象中。所以在这种情况下,它会是这样的:
merge(merge("data1", "data2"),"data3");
Run Code Online (Sandbox Code Playgroud)
这就是我现在解决它的方法:
首先,这个 HashMap 可能包含也可能不包含所有事件的数据,所以我过滤了可用事件的名称:
ArrayList<String> eventsToProcess = eventsOrder.stream()
.filter(eventName -> eventsData.containsKey(eventName))
.collect(Collectors.toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)
然后我使用这个丑陋的算法按时间顺序合并事件的数据:
String finalData = "";
int eventsCount = namesToProcess.size();
finalData = eventsData.get(namesToProcess.get(0));
if(eventsCount > 1) {
for (int i = 1; i < eventsCount; i++){
finalData …Run Code Online (Sandbox Code Playgroud) 我最近开始研究Haskell中的函数式编程,并给出了一些需要解决的问题,它要求使用递归和基本系统函数为列表创建自己的某些系统函数版本.我需要写的功能是:
!! (列表中的第n项)append (一起加入名单)subst(替代)例如subst 'x' 'y' ['q','x','r','x','s']〜>['q','y','r','x','y','s']intersection 例如intersection [2,5,7] [9,7,3,5]〜>[5,7]union 联盟例如 union [2,5,7] [9,7,3,5]〜>[2,5,7,9,3]reverse 例如reverse [4,5,6,7]〜>[7,6,5,4]我从第一个开始,写了这样的定义:
nthelement :: Eq a => [a] -> a -> a
Run Code Online (Sandbox Code Playgroud)
在命令式语言中,我会创建一个计数器变量(比如说i)并使用系统函数tail来删除列表的第一个元素,直到i = n.但是当我了解到在功能上你只能做常量时我无法想出一种方法来决定何时停止重复并返回元素而不是重新tail运行函数直到列表为空.
请帮我解决这个问题.做第一个功能或任何一个功能的任何帮助都会非常好.谢谢.
我在localhost:3000上运行了一个node.js(express)webapp.我现在正在尝试使用cordova开发移动应用程序.
我有一个在我的快递应用程序'localhost:3000/tweets'中定义的路由,当被调用时会使用twitter API获取一些推文并将它们作为json对象发回.Everythinngs使用网络应用程序工作得非常好但是我很难通过移动应用程序进行相同的ajax调用.为了允许来自其他主机的请求,我已将此添加到我的edxpress app.js:编辑:我现在使用cors中间件:
app.use(cors());
Run Code Online (Sandbox Code Playgroud)
在我的cordova应用程序中:
元标记:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
Run Code Online (Sandbox Code Playgroud)
config.xml中
<?xml version='1.0' encoding='utf-8'?>
<widget id="<id...>" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>appname</name>
<description>
A twitter search app.
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<access origin="*" />
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent …Run Code Online (Sandbox Code Playgroud) 我几天前开始研究Haskell,经历了基础知识,还有一些我无法理解的事情.
首先,当我尝试在GHCi控制台中使用':'运算符向列表的开头添加内容时,只有在我尝试添加单个文字但不添加列表时,它才有效.(5:[1,2,3,4])会工作,但([1,2]:[3,4,5])不会.但是有这个功能:
replicate2 n x
| n <= 0 = []
| otherwise = x:replicate2 (n-1) x
Run Code Online (Sandbox Code Playgroud)
我理解这是如何递归地运作,让我们称之为replicate2 2 [1,2]:它将通过第一个后卫,因此:
= [1,2]:replicate (2-1) [1,2]
= [1,2]:[1,2]:replicate (1-1) [1,2]
-- since n is now 0 it's an edge condition and first guard returns [], so recursion ends and we get:
= [1,2]:[1,2]:[]
Run Code Online (Sandbox Code Playgroud)
并且函数返回 [[1,2],[1,2]]
我的问题:这是如何工作的?难道Haskell不应该生气并吐出错误吗?当我尝试在GHCi中这样做时,它会这样做.