AnyValue增加forEach方法

This commit is contained in:
Redkale
2017-11-11 13:39:08 +08:00
parent 6e70f2043e
commit 98a6c3ef79
3 changed files with 82 additions and 31 deletions

View File

@@ -32,7 +32,6 @@ import org.redkale.util.AnyValue.DefaultAnyValue;
import org.redkale.util.*;
import org.redkale.watch.*;
import org.w3c.dom.*;
import sun.misc.Signal;
/**
*
@@ -624,35 +623,35 @@ public final class Application {
}
}
private void signalHandle() {
//http://www.comptechdoc.org/os/linux/programming/linux_pgsignals.html
String[] sigs = new String[]{"HUP", "TERM", "INT", "QUIT", "KILL", "TSTP", "USR1", "USR2", "STOP"};
List<sun.misc.Signal> list = new ArrayList<>();
for (String sig : sigs) {
try {
list.add(new sun.misc.Signal(sig));
} catch (Exception e) {
}
}
sun.misc.SignalHandler handler = new sun.misc.SignalHandler() {
private volatile boolean runed;
@Override
public void handle(Signal sig) {
if (runed) return;
runed = true;
logger.info(Application.this.getClass().getSimpleName() + " stoped\r\n");
System.exit(0);
}
};
for (Signal sig : list) {
try {
Signal.handle(sig, handler);
} catch (Exception e) {
}
}
}
// private void signalHandle() {
// //http://www.comptechdoc.org/os/linux/programming/linux_pgsignals.html
// String[] sigs = new String[]{"HUP", "TERM", "INT", "QUIT", "KILL", "TSTP", "USR1", "USR2", "STOP"};
// List<sun.misc.Signal> list = new ArrayList<>();
// for (String sig : sigs) {
// try {
// list.add(new sun.misc.Signal(sig));
// } catch (Exception e) {
// }
// }
// sun.misc.SignalHandler handler = new sun.misc.SignalHandler() {
//
// private volatile boolean runed;
//
// @Override
// public void handle(Signal sig) {
// if (runed) return;
// runed = true;
// logger.info(Application.this.getClass().getSimpleName() + " stoped\r\n");
// System.exit(0);
// }
// };
// for (Signal sig : list) {
// try {
// Signal.handle(sig, handler);
// } catch (Exception e) {
// }
// }
// }
@SuppressWarnings("unchecked")
private void runServers(CountDownLatch timecd, final List<AnyValue> serconfs) throws Exception {

View File

@@ -10,6 +10,7 @@ import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.charset.Charset;
import java.util.*;
import org.redkale.convert.json.JsonConvert;
import org.redkale.net.*;
import org.redkale.util.*;
@@ -897,6 +898,20 @@ public class HttpRequest extends Request<HttpContext> {
return header;
}
/**
* 将请求Header转换成Map
*
* @param map Map
*
* @return Map
*/
public Map<String, String> getHeadersToMap(Map<String, String> map) {
if (map == null) map = new LinkedHashMap<>();
final Map<String, String> map0 = map;
header.forEach((k, v) -> map0.put(k, v));
return map0;
}
/**
* 获取所有的header名
*
@@ -1105,6 +1120,20 @@ public class HttpRequest extends Request<HttpContext> {
return params;
}
/**
* 将请求参数转换成Map
*
* @param map Map
*
* @return Map
*/
public Map<String, String> getParametersToMap(Map<String, String> map) {
if (map == null) map = new LinkedHashMap<>();
final Map<String, String> map0 = map;
getParameters().forEach((k, v) -> map0.put(k, v));
return map0;
}
/**
* 获取所有参数名
*

View File

@@ -7,7 +7,7 @@ package org.redkale.util;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.BiPredicate;
import java.util.function.*;
/**
* 该类提供类似JSONObject的数据结构主要用于读取xml配置文件和http-header存储
@@ -190,6 +190,25 @@ public abstract class AnyValue {
return this;
}
@Override
public void forEach(BiConsumer<String, String> stringConsumer) {
forEach(stringConsumer, null);
}
@Override
public void forEach(BiConsumer<String, String> stringConsumer, BiConsumer<String, AnyValue> anyConsumer) {
if (stringConsumer != null) {
for (Entry<String> en : stringEntrys) {
stringConsumer.accept(en.name, en.value);
}
}
if (anyConsumer != null) {
for (Entry<AnyValue> en : (Entry[]) anyEntrys) {
anyConsumer.accept(en.name, en.value);
}
}
}
@Override
public Entry<String>[] getStringEntrys() {
return stringEntrys;
@@ -430,6 +449,10 @@ public abstract class AnyValue {
return sb.toString();
}
public abstract void forEach(BiConsumer<String, String> stringConsumer);
public abstract void forEach(BiConsumer<String, String> stringConsumer, BiConsumer<String, AnyValue> anyConsumer);
public abstract Entry<String>[] getStringEntrys();
public abstract Entry<AnyValue>[] getAnyEntrys();